/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
"use strict";

var $protobuf = require("protobufjs/minimal");

// Common aliases
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;

// Exported root namespace
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});

$root.pb = (function() {

    /**
     * Namespace pb.
     * @exports pb
     * @namespace
     */
    var pb = {};

    pb.TileInfo = (function() {

        /**
         * Properties of a TileInfo.
         * @memberof pb
         * @interface ITileInfo
         * @property {pb.TileId|null} [tid] TileInfo tid
         * @property {number|null} [index] TileInfo index
         */

        /**
         * Constructs a new TileInfo.
         * @memberof pb
         * @classdesc Represents a TileInfo.
         * @implements ITileInfo
         * @constructor
         * @param {pb.ITileInfo=} [properties] Properties to set
         */
        function TileInfo(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * TileInfo tid.
         * @member {pb.TileId} tid
         * @memberof pb.TileInfo
         * @instance
         */
        TileInfo.prototype.tid = 0;

        /**
         * TileInfo index.
         * @member {number} index
         * @memberof pb.TileInfo
         * @instance
         */
        TileInfo.prototype.index = 0;

        /**
         * Creates a new TileInfo instance using the specified properties.
         * @function create
         * @memberof pb.TileInfo
         * @static
         * @param {pb.ITileInfo=} [properties] Properties to set
         * @returns {pb.TileInfo} TileInfo instance
         */
        TileInfo.create = function create(properties) {
            return new TileInfo(properties);
        };

        /**
         * Encodes the specified TileInfo message. Does not implicitly {@link pb.TileInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.TileInfo
         * @static
         * @param {pb.ITileInfo} message TileInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        TileInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.tid != null && Object.hasOwnProperty.call(message, "tid"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.tid);
            if (message.index != null && Object.hasOwnProperty.call(message, "index"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.index);
            return writer;
        };

        /**
         * Encodes the specified TileInfo message, length delimited. Does not implicitly {@link pb.TileInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.TileInfo
         * @static
         * @param {pb.ITileInfo} message TileInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        TileInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a TileInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.TileInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.TileInfo} TileInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        TileInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.TileInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.tid = reader.int32();
                        break;
                    }
                case 2: {
                        message.index = reader.int32();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a TileInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.TileInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.TileInfo} TileInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        TileInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a TileInfo message.
         * @function verify
         * @memberof pb.TileInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        TileInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.tid != null && message.hasOwnProperty("tid"))
                switch (message.tid) {
                default:
                    return "tid: enum value expected";
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                case 11:
                case 12:
                case 13:
                case 14:
                case 15:
                case 16:
                case 17:
                case 18:
                case 19:
                case 20:
                case 21:
                case 22:
                case 23:
                case 24:
                case 25:
                case 26:
                case 27:
                case 28:
                case 29:
                case 30:
                case 31:
                case 32:
                case 33:
                case 34:
                case 35:
                case 36:
                case 37:
                case 38:
                case 39:
                case 40:
                case 41:
                case 42:
                case 99:
                    break;
                }
            if (message.index != null && message.hasOwnProperty("index"))
                if (!$util.isInteger(message.index))
                    return "index: integer expected";
            return null;
        };

        /**
         * Creates a TileInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.TileInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.TileInfo} TileInfo
         */
        TileInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.TileInfo)
                return object;
            var message = new $root.pb.TileInfo();
            switch (object.tid) {
            default:
                if (typeof object.tid === "number") {
                    message.tid = object.tid;
                    break;
                }
                break;
            case "w1":
            case 0:
                message.tid = 0;
                break;
            case "w2":
            case 1:
                message.tid = 1;
                break;
            case "w3":
            case 2:
                message.tid = 2;
                break;
            case "w4":
            case 3:
                message.tid = 3;
                break;
            case "w5":
            case 4:
                message.tid = 4;
                break;
            case "w6":
            case 5:
                message.tid = 5;
                break;
            case "w7":
            case 6:
                message.tid = 6;
                break;
            case "w8":
            case 7:
                message.tid = 7;
                break;
            case "w9":
            case 8:
                message.tid = 8;
                break;
            case "s1":
            case 9:
                message.tid = 9;
                break;
            case "s2":
            case 10:
                message.tid = 10;
                break;
            case "s3":
            case 11:
                message.tid = 11;
                break;
            case "s4":
            case 12:
                message.tid = 12;
                break;
            case "s5":
            case 13:
                message.tid = 13;
                break;
            case "s6":
            case 14:
                message.tid = 14;
                break;
            case "s7":
            case 15:
                message.tid = 15;
                break;
            case "s8":
            case 16:
                message.tid = 16;
                break;
            case "s9":
            case 17:
                message.tid = 17;
                break;
            case "t1":
            case 18:
                message.tid = 18;
                break;
            case "t2":
            case 19:
                message.tid = 19;
                break;
            case "t3":
            case 20:
                message.tid = 20;
                break;
            case "t4":
            case 21:
                message.tid = 21;
                break;
            case "t5":
            case 22:
                message.tid = 22;
                break;
            case "t6":
            case 23:
                message.tid = 23;
                break;
            case "t7":
            case 24:
                message.tid = 24;
                break;
            case "t8":
            case 25:
                message.tid = 25;
                break;
            case "t9":
            case 26:
                message.tid = 26;
                break;
            case "dong":
            case 27:
                message.tid = 27;
                break;
            case "nai":
            case 28:
                message.tid = 28;
                break;
            case "xi":
            case 29:
                message.tid = 29;
                break;
            case "bei":
            case 30:
                message.tid = 30;
                break;
            case "zhong":
            case 31:
                message.tid = 31;
                break;
            case "fai":
            case 32:
                message.tid = 32;
                break;
            case "bai":
            case 33:
                message.tid = 33;
                break;
            case "maxCard":
            case 34:
                message.tid = 34;
                break;
            case "spring":
            case 35:
                message.tid = 35;
                break;
            case "summer":
            case 36:
                message.tid = 36;
                break;
            case "autumn":
            case 37:
                message.tid = 37;
                break;
            case "winter":
            case 38:
                message.tid = 38;
                break;
            case "mei":
            case 39:
                message.tid = 39;
                break;
            case "lan":
            case 40:
                message.tid = 40;
                break;
            case "zhu":
            case 41:
                message.tid = 41;
                break;
            case "ju":
            case 42:
                message.tid = 42;
                break;
            case "noCard":
            case 99:
                message.tid = 99;
                break;
            }
            if (object.index != null)
                message.index = object.index | 0;
            return message;
        };

        /**
         * Creates a plain object from a TileInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.TileInfo
         * @static
         * @param {pb.TileInfo} message TileInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        TileInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.tid = options.enums === String ? "w1" : 0;
                object.index = 0;
            }
            if (message.tid != null && message.hasOwnProperty("tid"))
                object.tid = options.enums === String ? $root.pb.TileId[message.tid] === undefined ? message.tid : $root.pb.TileId[message.tid] : message.tid;
            if (message.index != null && message.hasOwnProperty("index"))
                object.index = message.index;
            return object;
        };

        /**
         * Converts this TileInfo to JSON.
         * @function toJSON
         * @memberof pb.TileInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        TileInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for TileInfo
         * @function getTypeUrl
         * @memberof pb.TileInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        TileInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.TileInfo";
        };

        return TileInfo;
    })();

    pb.DuanPaiInfo = (function() {

        /**
         * Properties of a DuanPaiInfo.
         * @memberof pb
         * @interface IDuanPaiInfo
         * @property {number|Long|null} [shortId] DuanPaiInfo shortId
         * @property {Array.<pb.ITileInfo>|null} [allCards] DuanPaiInfo allCards
         */

        /**
         * Constructs a new DuanPaiInfo.
         * @memberof pb
         * @classdesc Represents a DuanPaiInfo.
         * @implements IDuanPaiInfo
         * @constructor
         * @param {pb.IDuanPaiInfo=} [properties] Properties to set
         */
        function DuanPaiInfo(properties) {
            this.allCards = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DuanPaiInfo shortId.
         * @member {number|Long} shortId
         * @memberof pb.DuanPaiInfo
         * @instance
         */
        DuanPaiInfo.prototype.shortId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * DuanPaiInfo allCards.
         * @member {Array.<pb.ITileInfo>} allCards
         * @memberof pb.DuanPaiInfo
         * @instance
         */
        DuanPaiInfo.prototype.allCards = $util.emptyArray;

        /**
         * Creates a new DuanPaiInfo instance using the specified properties.
         * @function create
         * @memberof pb.DuanPaiInfo
         * @static
         * @param {pb.IDuanPaiInfo=} [properties] Properties to set
         * @returns {pb.DuanPaiInfo} DuanPaiInfo instance
         */
        DuanPaiInfo.create = function create(properties) {
            return new DuanPaiInfo(properties);
        };

        /**
         * Encodes the specified DuanPaiInfo message. Does not implicitly {@link pb.DuanPaiInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.DuanPaiInfo
         * @static
         * @param {pb.IDuanPaiInfo} message DuanPaiInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DuanPaiInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.shortId != null && Object.hasOwnProperty.call(message, "shortId"))
                writer.uint32(/* id 1, wireType 0 =*/8).int64(message.shortId);
            if (message.allCards != null && message.allCards.length)
                for (var i = 0; i < message.allCards.length; ++i)
                    $root.pb.TileInfo.encode(message.allCards[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DuanPaiInfo message, length delimited. Does not implicitly {@link pb.DuanPaiInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DuanPaiInfo
         * @static
         * @param {pb.IDuanPaiInfo} message DuanPaiInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DuanPaiInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DuanPaiInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DuanPaiInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DuanPaiInfo} DuanPaiInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DuanPaiInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DuanPaiInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.shortId = reader.int64();
                        break;
                    }
                case 2: {
                        if (!(message.allCards && message.allCards.length))
                            message.allCards = [];
                        message.allCards.push($root.pb.TileInfo.decode(reader, reader.uint32()));
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DuanPaiInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DuanPaiInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DuanPaiInfo} DuanPaiInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DuanPaiInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DuanPaiInfo message.
         * @function verify
         * @memberof pb.DuanPaiInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DuanPaiInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.shortId != null && message.hasOwnProperty("shortId"))
                if (!$util.isInteger(message.shortId) && !(message.shortId && $util.isInteger(message.shortId.low) && $util.isInteger(message.shortId.high)))
                    return "shortId: integer|Long expected";
            if (message.allCards != null && message.hasOwnProperty("allCards")) {
                if (!Array.isArray(message.allCards))
                    return "allCards: array expected";
                for (var i = 0; i < message.allCards.length; ++i) {
                    var error = $root.pb.TileInfo.verify(message.allCards[i]);
                    if (error)
                        return "allCards." + error;
                }
            }
            return null;
        };

        /**
         * Creates a DuanPaiInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DuanPaiInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DuanPaiInfo} DuanPaiInfo
         */
        DuanPaiInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DuanPaiInfo)
                return object;
            var message = new $root.pb.DuanPaiInfo();
            if (object.shortId != null)
                if ($util.Long)
                    (message.shortId = $util.Long.fromValue(object.shortId)).unsigned = false;
                else if (typeof object.shortId === "string")
                    message.shortId = parseInt(object.shortId, 10);
                else if (typeof object.shortId === "number")
                    message.shortId = object.shortId;
                else if (typeof object.shortId === "object")
                    message.shortId = new $util.LongBits(object.shortId.low >>> 0, object.shortId.high >>> 0).toNumber();
            if (object.allCards) {
                if (!Array.isArray(object.allCards))
                    throw TypeError(".pb.DuanPaiInfo.allCards: array expected");
                message.allCards = [];
                for (var i = 0; i < object.allCards.length; ++i) {
                    if (typeof object.allCards[i] !== "object")
                        throw TypeError(".pb.DuanPaiInfo.allCards: object expected");
                    message.allCards[i] = $root.pb.TileInfo.fromObject(object.allCards[i]);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from a DuanPaiInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DuanPaiInfo
         * @static
         * @param {pb.DuanPaiInfo} message DuanPaiInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DuanPaiInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.allCards = [];
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.shortId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.shortId = options.longs === String ? "0" : 0;
            if (message.shortId != null && message.hasOwnProperty("shortId"))
                if (typeof message.shortId === "number")
                    object.shortId = options.longs === String ? String(message.shortId) : message.shortId;
                else
                    object.shortId = options.longs === String ? $util.Long.prototype.toString.call(message.shortId) : options.longs === Number ? new $util.LongBits(message.shortId.low >>> 0, message.shortId.high >>> 0).toNumber() : message.shortId;
            if (message.allCards && message.allCards.length) {
                object.allCards = [];
                for (var j = 0; j < message.allCards.length; ++j)
                    object.allCards[j] = $root.pb.TileInfo.toObject(message.allCards[j], options);
            }
            return object;
        };

        /**
         * Converts this DuanPaiInfo to JSON.
         * @function toJSON
         * @memberof pb.DuanPaiInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DuanPaiInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DuanPaiInfo
         * @function getTypeUrl
         * @memberof pb.DuanPaiInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DuanPaiInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DuanPaiInfo";
        };

        return DuanPaiInfo;
    })();

    /**
     * TileId enum.
     * @name pb.TileId
     * @enum {number}
     * @property {number} w1=0 w1 value
     * @property {number} w2=1 w2 value
     * @property {number} w3=2 w3 value
     * @property {number} w4=3 w4 value
     * @property {number} w5=4 w5 value
     * @property {number} w6=5 w6 value
     * @property {number} w7=6 w7 value
     * @property {number} w8=7 w8 value
     * @property {number} w9=8 w9 value
     * @property {number} s1=9 s1 value
     * @property {number} s2=10 s2 value
     * @property {number} s3=11 s3 value
     * @property {number} s4=12 s4 value
     * @property {number} s5=13 s5 value
     * @property {number} s6=14 s6 value
     * @property {number} s7=15 s7 value
     * @property {number} s8=16 s8 value
     * @property {number} s9=17 s9 value
     * @property {number} t1=18 t1 value
     * @property {number} t2=19 t2 value
     * @property {number} t3=20 t3 value
     * @property {number} t4=21 t4 value
     * @property {number} t5=22 t5 value
     * @property {number} t6=23 t6 value
     * @property {number} t7=24 t7 value
     * @property {number} t8=25 t8 value
     * @property {number} t9=26 t9 value
     * @property {number} dong=27 dong value
     * @property {number} nai=28 nai value
     * @property {number} xi=29 xi value
     * @property {number} bei=30 bei value
     * @property {number} zhong=31 zhong value
     * @property {number} fai=32 fai value
     * @property {number} bai=33 bai value
     * @property {number} maxCard=34 maxCard value
     * @property {number} spring=35 spring value
     * @property {number} summer=36 summer value
     * @property {number} autumn=37 autumn value
     * @property {number} winter=38 winter value
     * @property {number} mei=39 mei value
     * @property {number} lan=40 lan value
     * @property {number} zhu=41 zhu value
     * @property {number} ju=42 ju value
     * @property {number} noCard=99 noCard value
     */
    pb.TileId = (function() {
        var valuesById = {}, values = Object.create(valuesById);
        values[valuesById[0] = "w1"] = 0;
        values[valuesById[1] = "w2"] = 1;
        values[valuesById[2] = "w3"] = 2;
        values[valuesById[3] = "w4"] = 3;
        values[valuesById[4] = "w5"] = 4;
        values[valuesById[5] = "w6"] = 5;
        values[valuesById[6] = "w7"] = 6;
        values[valuesById[7] = "w8"] = 7;
        values[valuesById[8] = "w9"] = 8;
        values[valuesById[9] = "s1"] = 9;
        values[valuesById[10] = "s2"] = 10;
        values[valuesById[11] = "s3"] = 11;
        values[valuesById[12] = "s4"] = 12;
        values[valuesById[13] = "s5"] = 13;
        values[valuesById[14] = "s6"] = 14;
        values[valuesById[15] = "s7"] = 15;
        values[valuesById[16] = "s8"] = 16;
        values[valuesById[17] = "s9"] = 17;
        values[valuesById[18] = "t1"] = 18;
        values[valuesById[19] = "t2"] = 19;
        values[valuesById[20] = "t3"] = 20;
        values[valuesById[21] = "t4"] = 21;
        values[valuesById[22] = "t5"] = 22;
        values[valuesById[23] = "t6"] = 23;
        values[valuesById[24] = "t7"] = 24;
        values[valuesById[25] = "t8"] = 25;
        values[valuesById[26] = "t9"] = 26;
        values[valuesById[27] = "dong"] = 27;
        values[valuesById[28] = "nai"] = 28;
        values[valuesById[29] = "xi"] = 29;
        values[valuesById[30] = "bei"] = 30;
        values[valuesById[31] = "zhong"] = 31;
        values[valuesById[32] = "fai"] = 32;
        values[valuesById[33] = "bai"] = 33;
        values[valuesById[34] = "maxCard"] = 34;
        values[valuesById[35] = "spring"] = 35;
        values[valuesById[36] = "summer"] = 36;
        values[valuesById[37] = "autumn"] = 37;
        values[valuesById[38] = "winter"] = 38;
        values[valuesById[39] = "mei"] = 39;
        values[valuesById[40] = "lan"] = 40;
        values[valuesById[41] = "zhu"] = 41;
        values[valuesById[42] = "ju"] = 42;
        values[valuesById[99] = "noCard"] = 99;
        return values;
    })();

    pb.CategoryItem = (function() {

        /**
         * Properties of a CategoryItem.
         * @memberof pb
         * @interface ICategoryItem
         * @property {string|null} [itemName] CategoryItem itemName
         * @property {number|Long|null} [diFenRate] CategoryItem diFenRate
         * @property {number|null} [onlineCount] CategoryItem onlineCount
         * @property {number|Long|null} [minRuby] CategoryItem minRuby
         * @property {number|Long|null} [maxRuby] CategoryItem maxRuby
         */

        /**
         * Constructs a new CategoryItem.
         * @memberof pb
         * @classdesc Represents a CategoryItem.
         * @implements ICategoryItem
         * @constructor
         * @param {pb.ICategoryItem=} [properties] Properties to set
         */
        function CategoryItem(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * CategoryItem itemName.
         * @member {string} itemName
         * @memberof pb.CategoryItem
         * @instance
         */
        CategoryItem.prototype.itemName = "";

        /**
         * CategoryItem diFenRate.
         * @member {number|Long} diFenRate
         * @memberof pb.CategoryItem
         * @instance
         */
        CategoryItem.prototype.diFenRate = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * CategoryItem onlineCount.
         * @member {number} onlineCount
         * @memberof pb.CategoryItem
         * @instance
         */
        CategoryItem.prototype.onlineCount = 0;

        /**
         * CategoryItem minRuby.
         * @member {number|Long} minRuby
         * @memberof pb.CategoryItem
         * @instance
         */
        CategoryItem.prototype.minRuby = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * CategoryItem maxRuby.
         * @member {number|Long} maxRuby
         * @memberof pb.CategoryItem
         * @instance
         */
        CategoryItem.prototype.maxRuby = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * Creates a new CategoryItem instance using the specified properties.
         * @function create
         * @memberof pb.CategoryItem
         * @static
         * @param {pb.ICategoryItem=} [properties] Properties to set
         * @returns {pb.CategoryItem} CategoryItem instance
         */
        CategoryItem.create = function create(properties) {
            return new CategoryItem(properties);
        };

        /**
         * Encodes the specified CategoryItem message. Does not implicitly {@link pb.CategoryItem.verify|verify} messages.
         * @function encode
         * @memberof pb.CategoryItem
         * @static
         * @param {pb.ICategoryItem} message CategoryItem message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CategoryItem.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.itemName != null && Object.hasOwnProperty.call(message, "itemName"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.itemName);
            if (message.diFenRate != null && Object.hasOwnProperty.call(message, "diFenRate"))
                writer.uint32(/* id 2, wireType 0 =*/16).int64(message.diFenRate);
            if (message.onlineCount != null && Object.hasOwnProperty.call(message, "onlineCount"))
                writer.uint32(/* id 3, wireType 0 =*/24).int32(message.onlineCount);
            if (message.minRuby != null && Object.hasOwnProperty.call(message, "minRuby"))
                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.minRuby);
            if (message.maxRuby != null && Object.hasOwnProperty.call(message, "maxRuby"))
                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.maxRuby);
            return writer;
        };

        /**
         * Encodes the specified CategoryItem message, length delimited. Does not implicitly {@link pb.CategoryItem.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.CategoryItem
         * @static
         * @param {pb.ICategoryItem} message CategoryItem message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CategoryItem.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a CategoryItem message from the specified reader or buffer.
         * @function decode
         * @memberof pb.CategoryItem
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.CategoryItem} CategoryItem
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CategoryItem.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.CategoryItem();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.itemName = reader.string();
                        break;
                    }
                case 2: {
                        message.diFenRate = reader.int64();
                        break;
                    }
                case 3: {
                        message.onlineCount = reader.int32();
                        break;
                    }
                case 4: {
                        message.minRuby = reader.int64();
                        break;
                    }
                case 5: {
                        message.maxRuby = reader.int64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a CategoryItem message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.CategoryItem
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.CategoryItem} CategoryItem
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CategoryItem.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a CategoryItem message.
         * @function verify
         * @memberof pb.CategoryItem
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CategoryItem.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.itemName != null && message.hasOwnProperty("itemName"))
                if (!$util.isString(message.itemName))
                    return "itemName: string expected";
            if (message.diFenRate != null && message.hasOwnProperty("diFenRate"))
                if (!$util.isInteger(message.diFenRate) && !(message.diFenRate && $util.isInteger(message.diFenRate.low) && $util.isInteger(message.diFenRate.high)))
                    return "diFenRate: integer|Long expected";
            if (message.onlineCount != null && message.hasOwnProperty("onlineCount"))
                if (!$util.isInteger(message.onlineCount))
                    return "onlineCount: integer expected";
            if (message.minRuby != null && message.hasOwnProperty("minRuby"))
                if (!$util.isInteger(message.minRuby) && !(message.minRuby && $util.isInteger(message.minRuby.low) && $util.isInteger(message.minRuby.high)))
                    return "minRuby: integer|Long expected";
            if (message.maxRuby != null && message.hasOwnProperty("maxRuby"))
                if (!$util.isInteger(message.maxRuby) && !(message.maxRuby && $util.isInteger(message.maxRuby.low) && $util.isInteger(message.maxRuby.high)))
                    return "maxRuby: integer|Long expected";
            return null;
        };

        /**
         * Creates a CategoryItem message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.CategoryItem
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.CategoryItem} CategoryItem
         */
        CategoryItem.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.CategoryItem)
                return object;
            var message = new $root.pb.CategoryItem();
            if (object.itemName != null)
                message.itemName = String(object.itemName);
            if (object.diFenRate != null)
                if ($util.Long)
                    (message.diFenRate = $util.Long.fromValue(object.diFenRate)).unsigned = false;
                else if (typeof object.diFenRate === "string")
                    message.diFenRate = parseInt(object.diFenRate, 10);
                else if (typeof object.diFenRate === "number")
                    message.diFenRate = object.diFenRate;
                else if (typeof object.diFenRate === "object")
                    message.diFenRate = new $util.LongBits(object.diFenRate.low >>> 0, object.diFenRate.high >>> 0).toNumber();
            if (object.onlineCount != null)
                message.onlineCount = object.onlineCount | 0;
            if (object.minRuby != null)
                if ($util.Long)
                    (message.minRuby = $util.Long.fromValue(object.minRuby)).unsigned = false;
                else if (typeof object.minRuby === "string")
                    message.minRuby = parseInt(object.minRuby, 10);
                else if (typeof object.minRuby === "number")
                    message.minRuby = object.minRuby;
                else if (typeof object.minRuby === "object")
                    message.minRuby = new $util.LongBits(object.minRuby.low >>> 0, object.minRuby.high >>> 0).toNumber();
            if (object.maxRuby != null)
                if ($util.Long)
                    (message.maxRuby = $util.Long.fromValue(object.maxRuby)).unsigned = false;
                else if (typeof object.maxRuby === "string")
                    message.maxRuby = parseInt(object.maxRuby, 10);
                else if (typeof object.maxRuby === "number")
                    message.maxRuby = object.maxRuby;
                else if (typeof object.maxRuby === "object")
                    message.maxRuby = new $util.LongBits(object.maxRuby.low >>> 0, object.maxRuby.high >>> 0).toNumber();
            return message;
        };

        /**
         * Creates a plain object from a CategoryItem message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.CategoryItem
         * @static
         * @param {pb.CategoryItem} message CategoryItem
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CategoryItem.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.itemName = "";
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.diFenRate = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.diFenRate = options.longs === String ? "0" : 0;
                object.onlineCount = 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.minRuby = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.minRuby = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.maxRuby = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.maxRuby = options.longs === String ? "0" : 0;
            }
            if (message.itemName != null && message.hasOwnProperty("itemName"))
                object.itemName = message.itemName;
            if (message.diFenRate != null && message.hasOwnProperty("diFenRate"))
                if (typeof message.diFenRate === "number")
                    object.diFenRate = options.longs === String ? String(message.diFenRate) : message.diFenRate;
                else
                    object.diFenRate = options.longs === String ? $util.Long.prototype.toString.call(message.diFenRate) : options.longs === Number ? new $util.LongBits(message.diFenRate.low >>> 0, message.diFenRate.high >>> 0).toNumber() : message.diFenRate;
            if (message.onlineCount != null && message.hasOwnProperty("onlineCount"))
                object.onlineCount = message.onlineCount;
            if (message.minRuby != null && message.hasOwnProperty("minRuby"))
                if (typeof message.minRuby === "number")
                    object.minRuby = options.longs === String ? String(message.minRuby) : message.minRuby;
                else
                    object.minRuby = options.longs === String ? $util.Long.prototype.toString.call(message.minRuby) : options.longs === Number ? new $util.LongBits(message.minRuby.low >>> 0, message.minRuby.high >>> 0).toNumber() : message.minRuby;
            if (message.maxRuby != null && message.hasOwnProperty("maxRuby"))
                if (typeof message.maxRuby === "number")
                    object.maxRuby = options.longs === String ? String(message.maxRuby) : message.maxRuby;
                else
                    object.maxRuby = options.longs === String ? $util.Long.prototype.toString.call(message.maxRuby) : options.longs === Number ? new $util.LongBits(message.maxRuby.low >>> 0, message.maxRuby.high >>> 0).toNumber() : message.maxRuby;
            return object;
        };

        /**
         * Converts this CategoryItem to JSON.
         * @function toJSON
         * @memberof pb.CategoryItem
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CategoryItem.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for CategoryItem
         * @function getTypeUrl
         * @memberof pb.CategoryItem
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        CategoryItem.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.CategoryItem";
        };

        return CategoryItem;
    })();

    pb.DeskCreateDeskReq = (function() {

        /**
         * Properties of a DeskCreateDeskReq.
         * @memberof pb
         * @interface IDeskCreateDeskReq
         * @property {string|null} [gameType] DeskCreateDeskReq gameType
         * @property {pb.IMjDeskOpt|null} [mjOpt] DeskCreateDeskReq mjOpt
         */

        /**
         * Constructs a new DeskCreateDeskReq.
         * @memberof pb
         * @classdesc Represents a DeskCreateDeskReq.
         * @implements IDeskCreateDeskReq
         * @constructor
         * @param {pb.IDeskCreateDeskReq=} [properties] Properties to set
         */
        function DeskCreateDeskReq(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskCreateDeskReq gameType.
         * @member {string} gameType
         * @memberof pb.DeskCreateDeskReq
         * @instance
         */
        DeskCreateDeskReq.prototype.gameType = "";

        /**
         * DeskCreateDeskReq mjOpt.
         * @member {pb.IMjDeskOpt|null|undefined} mjOpt
         * @memberof pb.DeskCreateDeskReq
         * @instance
         */
        DeskCreateDeskReq.prototype.mjOpt = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * DeskCreateDeskReq _mjOpt.
         * @member {"mjOpt"|undefined} _mjOpt
         * @memberof pb.DeskCreateDeskReq
         * @instance
         */
        Object.defineProperty(DeskCreateDeskReq.prototype, "_mjOpt", {
            get: $util.oneOfGetter($oneOfFields = ["mjOpt"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new DeskCreateDeskReq instance using the specified properties.
         * @function create
         * @memberof pb.DeskCreateDeskReq
         * @static
         * @param {pb.IDeskCreateDeskReq=} [properties] Properties to set
         * @returns {pb.DeskCreateDeskReq} DeskCreateDeskReq instance
         */
        DeskCreateDeskReq.create = function create(properties) {
            return new DeskCreateDeskReq(properties);
        };

        /**
         * Encodes the specified DeskCreateDeskReq message. Does not implicitly {@link pb.DeskCreateDeskReq.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskCreateDeskReq
         * @static
         * @param {pb.IDeskCreateDeskReq} message DeskCreateDeskReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskCreateDeskReq.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.gameType != null && Object.hasOwnProperty.call(message, "gameType"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.gameType);
            if (message.mjOpt != null && Object.hasOwnProperty.call(message, "mjOpt"))
                $root.pb.MjDeskOpt.encode(message.mjOpt, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DeskCreateDeskReq message, length delimited. Does not implicitly {@link pb.DeskCreateDeskReq.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskCreateDeskReq
         * @static
         * @param {pb.IDeskCreateDeskReq} message DeskCreateDeskReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskCreateDeskReq.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskCreateDeskReq message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskCreateDeskReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskCreateDeskReq} DeskCreateDeskReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskCreateDeskReq.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskCreateDeskReq();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.gameType = reader.string();
                        break;
                    }
                case 2: {
                        message.mjOpt = $root.pb.MjDeskOpt.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskCreateDeskReq message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskCreateDeskReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskCreateDeskReq} DeskCreateDeskReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskCreateDeskReq.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskCreateDeskReq message.
         * @function verify
         * @memberof pb.DeskCreateDeskReq
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskCreateDeskReq.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.gameType != null && message.hasOwnProperty("gameType"))
                if (!$util.isString(message.gameType))
                    return "gameType: string expected";
            if (message.mjOpt != null && message.hasOwnProperty("mjOpt")) {
                properties._mjOpt = 1;
                {
                    var error = $root.pb.MjDeskOpt.verify(message.mjOpt);
                    if (error)
                        return "mjOpt." + error;
                }
            }
            return null;
        };

        /**
         * Creates a DeskCreateDeskReq message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskCreateDeskReq
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskCreateDeskReq} DeskCreateDeskReq
         */
        DeskCreateDeskReq.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskCreateDeskReq)
                return object;
            var message = new $root.pb.DeskCreateDeskReq();
            if (object.gameType != null)
                message.gameType = String(object.gameType);
            if (object.mjOpt != null) {
                if (typeof object.mjOpt !== "object")
                    throw TypeError(".pb.DeskCreateDeskReq.mjOpt: object expected");
                message.mjOpt = $root.pb.MjDeskOpt.fromObject(object.mjOpt);
            }
            return message;
        };

        /**
         * Creates a plain object from a DeskCreateDeskReq message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskCreateDeskReq
         * @static
         * @param {pb.DeskCreateDeskReq} message DeskCreateDeskReq
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskCreateDeskReq.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.gameType = "";
            if (message.gameType != null && message.hasOwnProperty("gameType"))
                object.gameType = message.gameType;
            if (message.mjOpt != null && message.hasOwnProperty("mjOpt")) {
                object.mjOpt = $root.pb.MjDeskOpt.toObject(message.mjOpt, options);
                if (options.oneofs)
                    object._mjOpt = "mjOpt";
            }
            return object;
        };

        /**
         * Converts this DeskCreateDeskReq to JSON.
         * @function toJSON
         * @memberof pb.DeskCreateDeskReq
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskCreateDeskReq.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskCreateDeskReq
         * @function getTypeUrl
         * @memberof pb.DeskCreateDeskReq
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskCreateDeskReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskCreateDeskReq";
        };

        return DeskCreateDeskReq;
    })();

    pb.DeskInfo = (function() {

        /**
         * Properties of a DeskInfo.
         * @memberof pb
         * @interface IDeskInfo
         * @property {string|null} [deskNo] DeskInfo deskNo
         * @property {number|null} [juShu] DeskInfo juShu
         * @property {number|null} [diFen] DeskInfo diFen
         * @property {pb.DeskStatus|null} [status] DeskInfo status
         * @property {pb.IMjDeskOpt|null} [mjOpt] DeskInfo mjOpt
         */

        /**
         * Constructs a new DeskInfo.
         * @memberof pb
         * @classdesc Represents a DeskInfo.
         * @implements IDeskInfo
         * @constructor
         * @param {pb.IDeskInfo=} [properties] Properties to set
         */
        function DeskInfo(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskInfo deskNo.
         * @member {string} deskNo
         * @memberof pb.DeskInfo
         * @instance
         */
        DeskInfo.prototype.deskNo = "";

        /**
         * DeskInfo juShu.
         * @member {number} juShu
         * @memberof pb.DeskInfo
         * @instance
         */
        DeskInfo.prototype.juShu = 0;

        /**
         * DeskInfo diFen.
         * @member {number} diFen
         * @memberof pb.DeskInfo
         * @instance
         */
        DeskInfo.prototype.diFen = 0;

        /**
         * DeskInfo status.
         * @member {pb.DeskStatus} status
         * @memberof pb.DeskInfo
         * @instance
         */
        DeskInfo.prototype.status = 0;

        /**
         * DeskInfo mjOpt.
         * @member {pb.IMjDeskOpt|null|undefined} mjOpt
         * @memberof pb.DeskInfo
         * @instance
         */
        DeskInfo.prototype.mjOpt = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * DeskInfo _mjOpt.
         * @member {"mjOpt"|undefined} _mjOpt
         * @memberof pb.DeskInfo
         * @instance
         */
        Object.defineProperty(DeskInfo.prototype, "_mjOpt", {
            get: $util.oneOfGetter($oneOfFields = ["mjOpt"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new DeskInfo instance using the specified properties.
         * @function create
         * @memberof pb.DeskInfo
         * @static
         * @param {pb.IDeskInfo=} [properties] Properties to set
         * @returns {pb.DeskInfo} DeskInfo instance
         */
        DeskInfo.create = function create(properties) {
            return new DeskInfo(properties);
        };

        /**
         * Encodes the specified DeskInfo message. Does not implicitly {@link pb.DeskInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskInfo
         * @static
         * @param {pb.IDeskInfo} message DeskInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.deskNo != null && Object.hasOwnProperty.call(message, "deskNo"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.deskNo);
            if (message.juShu != null && Object.hasOwnProperty.call(message, "juShu"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.juShu);
            if (message.diFen != null && Object.hasOwnProperty.call(message, "diFen"))
                writer.uint32(/* id 3, wireType 0 =*/24).int32(message.diFen);
            if (message.status != null && Object.hasOwnProperty.call(message, "status"))
                writer.uint32(/* id 4, wireType 0 =*/32).int32(message.status);
            if (message.mjOpt != null && Object.hasOwnProperty.call(message, "mjOpt"))
                $root.pb.MjDeskOpt.encode(message.mjOpt, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DeskInfo message, length delimited. Does not implicitly {@link pb.DeskInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskInfo
         * @static
         * @param {pb.IDeskInfo} message DeskInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskInfo} DeskInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.deskNo = reader.string();
                        break;
                    }
                case 2: {
                        message.juShu = reader.int32();
                        break;
                    }
                case 3: {
                        message.diFen = reader.int32();
                        break;
                    }
                case 4: {
                        message.status = reader.int32();
                        break;
                    }
                case 5: {
                        message.mjOpt = $root.pb.MjDeskOpt.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskInfo} DeskInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskInfo message.
         * @function verify
         * @memberof pb.DeskInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.deskNo != null && message.hasOwnProperty("deskNo"))
                if (!$util.isString(message.deskNo))
                    return "deskNo: string expected";
            if (message.juShu != null && message.hasOwnProperty("juShu"))
                if (!$util.isInteger(message.juShu))
                    return "juShu: integer expected";
            if (message.diFen != null && message.hasOwnProperty("diFen"))
                if (!$util.isInteger(message.diFen))
                    return "diFen: integer expected";
            if (message.status != null && message.hasOwnProperty("status"))
                switch (message.status) {
                default:
                    return "status: enum value expected";
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                case 8:
                    break;
                }
            if (message.mjOpt != null && message.hasOwnProperty("mjOpt")) {
                properties._mjOpt = 1;
                {
                    var error = $root.pb.MjDeskOpt.verify(message.mjOpt);
                    if (error)
                        return "mjOpt." + error;
                }
            }
            return null;
        };

        /**
         * Creates a DeskInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskInfo} DeskInfo
         */
        DeskInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskInfo)
                return object;
            var message = new $root.pb.DeskInfo();
            if (object.deskNo != null)
                message.deskNo = String(object.deskNo);
            if (object.juShu != null)
                message.juShu = object.juShu | 0;
            if (object.diFen != null)
                message.diFen = object.diFen | 0;
            switch (object.status) {
            default:
                if (typeof object.status === "number") {
                    message.status = object.status;
                    break;
                }
                break;
            case "notStatus":
            case 0:
                message.status = 0;
                break;
            case "created":
            case 1:
                message.status = 1;
                break;
            case "duanPai":
            case 2:
                message.status = 2;
                break;
            case "qiPai":
            case 3:
                message.status = 3;
                break;
            case "playing":
            case 4:
                message.status = 4;
                break;
            case "roundOver":
            case 5:
                message.status = 5;
                break;
            case "interruption":
            case 6:
                message.status = 6;
                break;
            case "destroy":
            case 7:
                message.status = 7;
                break;
            case "cleaned":
            case 8:
                message.status = 8;
                break;
            }
            if (object.mjOpt != null) {
                if (typeof object.mjOpt !== "object")
                    throw TypeError(".pb.DeskInfo.mjOpt: object expected");
                message.mjOpt = $root.pb.MjDeskOpt.fromObject(object.mjOpt);
            }
            return message;
        };

        /**
         * Creates a plain object from a DeskInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskInfo
         * @static
         * @param {pb.DeskInfo} message DeskInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.deskNo = "";
                object.juShu = 0;
                object.diFen = 0;
                object.status = options.enums === String ? "notStatus" : 0;
            }
            if (message.deskNo != null && message.hasOwnProperty("deskNo"))
                object.deskNo = message.deskNo;
            if (message.juShu != null && message.hasOwnProperty("juShu"))
                object.juShu = message.juShu;
            if (message.diFen != null && message.hasOwnProperty("diFen"))
                object.diFen = message.diFen;
            if (message.status != null && message.hasOwnProperty("status"))
                object.status = options.enums === String ? $root.pb.DeskStatus[message.status] === undefined ? message.status : $root.pb.DeskStatus[message.status] : message.status;
            if (message.mjOpt != null && message.hasOwnProperty("mjOpt")) {
                object.mjOpt = $root.pb.MjDeskOpt.toObject(message.mjOpt, options);
                if (options.oneofs)
                    object._mjOpt = "mjOpt";
            }
            return object;
        };

        /**
         * Converts this DeskInfo to JSON.
         * @function toJSON
         * @memberof pb.DeskInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskInfo
         * @function getTypeUrl
         * @memberof pb.DeskInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskInfo";
        };

        return DeskInfo;
    })();

    pb.MjDeskOpt = (function() {

        /**
         * Properties of a MjDeskOpt.
         * @memberof pb
         * @interface IMjDeskOpt
         * @property {number|null} [playerCount] MjDeskOpt playerCount
         * @property {number|null} [totalRound] MjDeskOpt totalRound
         * @property {boolean|null} [isRuby] MjDeskOpt isRuby
         * @property {boolean|null} [isPrivate] MjDeskOpt isPrivate
         * @property {boolean|null} [isClub] MjDeskOpt isClub
         */

        /**
         * Constructs a new MjDeskOpt.
         * @memberof pb
         * @classdesc Represents a MjDeskOpt.
         * @implements IMjDeskOpt
         * @constructor
         * @param {pb.IMjDeskOpt=} [properties] Properties to set
         */
        function MjDeskOpt(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MjDeskOpt playerCount.
         * @member {number} playerCount
         * @memberof pb.MjDeskOpt
         * @instance
         */
        MjDeskOpt.prototype.playerCount = 0;

        /**
         * MjDeskOpt totalRound.
         * @member {number} totalRound
         * @memberof pb.MjDeskOpt
         * @instance
         */
        MjDeskOpt.prototype.totalRound = 0;

        /**
         * MjDeskOpt isRuby.
         * @member {boolean} isRuby
         * @memberof pb.MjDeskOpt
         * @instance
         */
        MjDeskOpt.prototype.isRuby = false;

        /**
         * MjDeskOpt isPrivate.
         * @member {boolean} isPrivate
         * @memberof pb.MjDeskOpt
         * @instance
         */
        MjDeskOpt.prototype.isPrivate = false;

        /**
         * MjDeskOpt isClub.
         * @member {boolean} isClub
         * @memberof pb.MjDeskOpt
         * @instance
         */
        MjDeskOpt.prototype.isClub = false;

        /**
         * Creates a new MjDeskOpt instance using the specified properties.
         * @function create
         * @memberof pb.MjDeskOpt
         * @static
         * @param {pb.IMjDeskOpt=} [properties] Properties to set
         * @returns {pb.MjDeskOpt} MjDeskOpt instance
         */
        MjDeskOpt.create = function create(properties) {
            return new MjDeskOpt(properties);
        };

        /**
         * Encodes the specified MjDeskOpt message. Does not implicitly {@link pb.MjDeskOpt.verify|verify} messages.
         * @function encode
         * @memberof pb.MjDeskOpt
         * @static
         * @param {pb.IMjDeskOpt} message MjDeskOpt message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MjDeskOpt.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.playerCount != null && Object.hasOwnProperty.call(message, "playerCount"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.playerCount);
            if (message.totalRound != null && Object.hasOwnProperty.call(message, "totalRound"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.totalRound);
            if (message.isRuby != null && Object.hasOwnProperty.call(message, "isRuby"))
                writer.uint32(/* id 3, wireType 0 =*/24).bool(message.isRuby);
            if (message.isPrivate != null && Object.hasOwnProperty.call(message, "isPrivate"))
                writer.uint32(/* id 4, wireType 0 =*/32).bool(message.isPrivate);
            if (message.isClub != null && Object.hasOwnProperty.call(message, "isClub"))
                writer.uint32(/* id 5, wireType 0 =*/40).bool(message.isClub);
            return writer;
        };

        /**
         * Encodes the specified MjDeskOpt message, length delimited. Does not implicitly {@link pb.MjDeskOpt.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.MjDeskOpt
         * @static
         * @param {pb.IMjDeskOpt} message MjDeskOpt message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MjDeskOpt.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MjDeskOpt message from the specified reader or buffer.
         * @function decode
         * @memberof pb.MjDeskOpt
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.MjDeskOpt} MjDeskOpt
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MjDeskOpt.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.MjDeskOpt();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.playerCount = reader.int32();
                        break;
                    }
                case 2: {
                        message.totalRound = reader.int32();
                        break;
                    }
                case 3: {
                        message.isRuby = reader.bool();
                        break;
                    }
                case 4: {
                        message.isPrivate = reader.bool();
                        break;
                    }
                case 5: {
                        message.isClub = reader.bool();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MjDeskOpt message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.MjDeskOpt
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.MjDeskOpt} MjDeskOpt
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MjDeskOpt.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MjDeskOpt message.
         * @function verify
         * @memberof pb.MjDeskOpt
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MjDeskOpt.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.playerCount != null && message.hasOwnProperty("playerCount"))
                if (!$util.isInteger(message.playerCount))
                    return "playerCount: integer expected";
            if (message.totalRound != null && message.hasOwnProperty("totalRound"))
                if (!$util.isInteger(message.totalRound))
                    return "totalRound: integer expected";
            if (message.isRuby != null && message.hasOwnProperty("isRuby"))
                if (typeof message.isRuby !== "boolean")
                    return "isRuby: boolean expected";
            if (message.isPrivate != null && message.hasOwnProperty("isPrivate"))
                if (typeof message.isPrivate !== "boolean")
                    return "isPrivate: boolean expected";
            if (message.isClub != null && message.hasOwnProperty("isClub"))
                if (typeof message.isClub !== "boolean")
                    return "isClub: boolean expected";
            return null;
        };

        /**
         * Creates a MjDeskOpt message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.MjDeskOpt
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.MjDeskOpt} MjDeskOpt
         */
        MjDeskOpt.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.MjDeskOpt)
                return object;
            var message = new $root.pb.MjDeskOpt();
            if (object.playerCount != null)
                message.playerCount = object.playerCount | 0;
            if (object.totalRound != null)
                message.totalRound = object.totalRound | 0;
            if (object.isRuby != null)
                message.isRuby = Boolean(object.isRuby);
            if (object.isPrivate != null)
                message.isPrivate = Boolean(object.isPrivate);
            if (object.isClub != null)
                message.isClub = Boolean(object.isClub);
            return message;
        };

        /**
         * Creates a plain object from a MjDeskOpt message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.MjDeskOpt
         * @static
         * @param {pb.MjDeskOpt} message MjDeskOpt
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MjDeskOpt.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.playerCount = 0;
                object.totalRound = 0;
                object.isRuby = false;
                object.isPrivate = false;
                object.isClub = false;
            }
            if (message.playerCount != null && message.hasOwnProperty("playerCount"))
                object.playerCount = message.playerCount;
            if (message.totalRound != null && message.hasOwnProperty("totalRound"))
                object.totalRound = message.totalRound;
            if (message.isRuby != null && message.hasOwnProperty("isRuby"))
                object.isRuby = message.isRuby;
            if (message.isPrivate != null && message.hasOwnProperty("isPrivate"))
                object.isPrivate = message.isPrivate;
            if (message.isClub != null && message.hasOwnProperty("isClub"))
                object.isClub = message.isClub;
            return object;
        };

        /**
         * Converts this MjDeskOpt to JSON.
         * @function toJSON
         * @memberof pb.MjDeskOpt
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MjDeskOpt.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for MjDeskOpt
         * @function getTypeUrl
         * @memberof pb.MjDeskOpt
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        MjDeskOpt.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.MjDeskOpt";
        };

        return MjDeskOpt;
    })();

    pb.DeskRoundInfo = (function() {

        /**
         * Properties of a DeskRoundInfo.
         * @memberof pb
         * @interface IDeskRoundInfo
         * @property {number|Long|null} [bankerShortId] DeskRoundInfo bankerShortId
         * @property {number|null} [lastTileIndex] DeskRoundInfo lastTileIndex
         * @property {number|null} [curTurn] DeskRoundInfo curTurn
         */

        /**
         * Constructs a new DeskRoundInfo.
         * @memberof pb
         * @classdesc Represents a DeskRoundInfo.
         * @implements IDeskRoundInfo
         * @constructor
         * @param {pb.IDeskRoundInfo=} [properties] Properties to set
         */
        function DeskRoundInfo(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskRoundInfo bankerShortId.
         * @member {number|Long} bankerShortId
         * @memberof pb.DeskRoundInfo
         * @instance
         */
        DeskRoundInfo.prototype.bankerShortId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * DeskRoundInfo lastTileIndex.
         * @member {number} lastTileIndex
         * @memberof pb.DeskRoundInfo
         * @instance
         */
        DeskRoundInfo.prototype.lastTileIndex = 0;

        /**
         * DeskRoundInfo curTurn.
         * @member {number} curTurn
         * @memberof pb.DeskRoundInfo
         * @instance
         */
        DeskRoundInfo.prototype.curTurn = 0;

        /**
         * Creates a new DeskRoundInfo instance using the specified properties.
         * @function create
         * @memberof pb.DeskRoundInfo
         * @static
         * @param {pb.IDeskRoundInfo=} [properties] Properties to set
         * @returns {pb.DeskRoundInfo} DeskRoundInfo instance
         */
        DeskRoundInfo.create = function create(properties) {
            return new DeskRoundInfo(properties);
        };

        /**
         * Encodes the specified DeskRoundInfo message. Does not implicitly {@link pb.DeskRoundInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskRoundInfo
         * @static
         * @param {pb.IDeskRoundInfo} message DeskRoundInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskRoundInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.bankerShortId != null && Object.hasOwnProperty.call(message, "bankerShortId"))
                writer.uint32(/* id 1, wireType 0 =*/8).int64(message.bankerShortId);
            if (message.lastTileIndex != null && Object.hasOwnProperty.call(message, "lastTileIndex"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.lastTileIndex);
            if (message.curTurn != null && Object.hasOwnProperty.call(message, "curTurn"))
                writer.uint32(/* id 3, wireType 0 =*/24).int32(message.curTurn);
            return writer;
        };

        /**
         * Encodes the specified DeskRoundInfo message, length delimited. Does not implicitly {@link pb.DeskRoundInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskRoundInfo
         * @static
         * @param {pb.IDeskRoundInfo} message DeskRoundInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskRoundInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskRoundInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskRoundInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskRoundInfo} DeskRoundInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskRoundInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskRoundInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.bankerShortId = reader.int64();
                        break;
                    }
                case 2: {
                        message.lastTileIndex = reader.int32();
                        break;
                    }
                case 3: {
                        message.curTurn = reader.int32();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskRoundInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskRoundInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskRoundInfo} DeskRoundInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskRoundInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskRoundInfo message.
         * @function verify
         * @memberof pb.DeskRoundInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskRoundInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.bankerShortId != null && message.hasOwnProperty("bankerShortId"))
                if (!$util.isInteger(message.bankerShortId) && !(message.bankerShortId && $util.isInteger(message.bankerShortId.low) && $util.isInteger(message.bankerShortId.high)))
                    return "bankerShortId: integer|Long expected";
            if (message.lastTileIndex != null && message.hasOwnProperty("lastTileIndex"))
                if (!$util.isInteger(message.lastTileIndex))
                    return "lastTileIndex: integer expected";
            if (message.curTurn != null && message.hasOwnProperty("curTurn"))
                if (!$util.isInteger(message.curTurn))
                    return "curTurn: integer expected";
            return null;
        };

        /**
         * Creates a DeskRoundInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskRoundInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskRoundInfo} DeskRoundInfo
         */
        DeskRoundInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskRoundInfo)
                return object;
            var message = new $root.pb.DeskRoundInfo();
            if (object.bankerShortId != null)
                if ($util.Long)
                    (message.bankerShortId = $util.Long.fromValue(object.bankerShortId)).unsigned = false;
                else if (typeof object.bankerShortId === "string")
                    message.bankerShortId = parseInt(object.bankerShortId, 10);
                else if (typeof object.bankerShortId === "number")
                    message.bankerShortId = object.bankerShortId;
                else if (typeof object.bankerShortId === "object")
                    message.bankerShortId = new $util.LongBits(object.bankerShortId.low >>> 0, object.bankerShortId.high >>> 0).toNumber();
            if (object.lastTileIndex != null)
                message.lastTileIndex = object.lastTileIndex | 0;
            if (object.curTurn != null)
                message.curTurn = object.curTurn | 0;
            return message;
        };

        /**
         * Creates a plain object from a DeskRoundInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskRoundInfo
         * @static
         * @param {pb.DeskRoundInfo} message DeskRoundInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskRoundInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.bankerShortId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.bankerShortId = options.longs === String ? "0" : 0;
                object.lastTileIndex = 0;
                object.curTurn = 0;
            }
            if (message.bankerShortId != null && message.hasOwnProperty("bankerShortId"))
                if (typeof message.bankerShortId === "number")
                    object.bankerShortId = options.longs === String ? String(message.bankerShortId) : message.bankerShortId;
                else
                    object.bankerShortId = options.longs === String ? $util.Long.prototype.toString.call(message.bankerShortId) : options.longs === Number ? new $util.LongBits(message.bankerShortId.low >>> 0, message.bankerShortId.high >>> 0).toNumber() : message.bankerShortId;
            if (message.lastTileIndex != null && message.hasOwnProperty("lastTileIndex"))
                object.lastTileIndex = message.lastTileIndex;
            if (message.curTurn != null && message.hasOwnProperty("curTurn"))
                object.curTurn = message.curTurn;
            return object;
        };

        /**
         * Converts this DeskRoundInfo to JSON.
         * @function toJSON
         * @memberof pb.DeskRoundInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskRoundInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskRoundInfo
         * @function getTypeUrl
         * @memberof pb.DeskRoundInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskRoundInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskRoundInfo";
        };

        return DeskRoundInfo;
    })();

    /**
     * DeskStatus enum.
     * @name pb.DeskStatus
     * @enum {number}
     * @property {number} notStatus=0 notStatus value
     * @property {number} created=1 created value
     * @property {number} duanPai=2 duanPai value
     * @property {number} qiPai=3 qiPai value
     * @property {number} playing=4 playing value
     * @property {number} roundOver=5 roundOver value
     * @property {number} interruption=6 interruption value
     * @property {number} destroy=7 destroy value
     * @property {number} cleaned=8 cleaned value
     */
    pb.DeskStatus = (function() {
        var valuesById = {}, values = Object.create(valuesById);
        values[valuesById[0] = "notStatus"] = 0;
        values[valuesById[1] = "created"] = 1;
        values[valuesById[2] = "duanPai"] = 2;
        values[valuesById[3] = "qiPai"] = 3;
        values[valuesById[4] = "playing"] = 4;
        values[valuesById[5] = "roundOver"] = 5;
        values[valuesById[6] = "interruption"] = 6;
        values[valuesById[7] = "destroy"] = 7;
        values[valuesById[8] = "cleaned"] = 8;
        return values;
    })();

    /**
     * MjOpTpe enum.
     * @name pb.MjOpTpe
     * @enum {number}
     * @property {number} illegal=0 illegal value
     * @property {number} chu=1 chu value
     */
    pb.MjOpTpe = (function() {
        var valuesById = {}, values = Object.create(valuesById);
        values[valuesById[0] = "illegal"] = 0;
        values[valuesById[1] = "chu"] = 1;
        return values;
    })();

    pb.DeskCreateDeskResp = (function() {

        /**
         * Properties of a DeskCreateDeskResp.
         * @memberof pb
         * @interface IDeskCreateDeskResp
         * @property {number|null} [code] DeskCreateDeskResp code
         * @property {pb.IDeskCreateDeskInfo|null} [data] DeskCreateDeskResp data
         */

        /**
         * Constructs a new DeskCreateDeskResp.
         * @memberof pb
         * @classdesc Represents a DeskCreateDeskResp.
         * @implements IDeskCreateDeskResp
         * @constructor
         * @param {pb.IDeskCreateDeskResp=} [properties] Properties to set
         */
        function DeskCreateDeskResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskCreateDeskResp code.
         * @member {number} code
         * @memberof pb.DeskCreateDeskResp
         * @instance
         */
        DeskCreateDeskResp.prototype.code = 0;

        /**
         * DeskCreateDeskResp data.
         * @member {pb.IDeskCreateDeskInfo|null|undefined} data
         * @memberof pb.DeskCreateDeskResp
         * @instance
         */
        DeskCreateDeskResp.prototype.data = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * DeskCreateDeskResp _data.
         * @member {"data"|undefined} _data
         * @memberof pb.DeskCreateDeskResp
         * @instance
         */
        Object.defineProperty(DeskCreateDeskResp.prototype, "_data", {
            get: $util.oneOfGetter($oneOfFields = ["data"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new DeskCreateDeskResp instance using the specified properties.
         * @function create
         * @memberof pb.DeskCreateDeskResp
         * @static
         * @param {pb.IDeskCreateDeskResp=} [properties] Properties to set
         * @returns {pb.DeskCreateDeskResp} DeskCreateDeskResp instance
         */
        DeskCreateDeskResp.create = function create(properties) {
            return new DeskCreateDeskResp(properties);
        };

        /**
         * Encodes the specified DeskCreateDeskResp message. Does not implicitly {@link pb.DeskCreateDeskResp.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskCreateDeskResp
         * @static
         * @param {pb.IDeskCreateDeskResp} message DeskCreateDeskResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskCreateDeskResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.code != null && Object.hasOwnProperty.call(message, "code"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.code);
            if (message.data != null && Object.hasOwnProperty.call(message, "data"))
                $root.pb.DeskCreateDeskInfo.encode(message.data, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DeskCreateDeskResp message, length delimited. Does not implicitly {@link pb.DeskCreateDeskResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskCreateDeskResp
         * @static
         * @param {pb.IDeskCreateDeskResp} message DeskCreateDeskResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskCreateDeskResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskCreateDeskResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskCreateDeskResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskCreateDeskResp} DeskCreateDeskResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskCreateDeskResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskCreateDeskResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.code = reader.int32();
                        break;
                    }
                case 2: {
                        message.data = $root.pb.DeskCreateDeskInfo.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskCreateDeskResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskCreateDeskResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskCreateDeskResp} DeskCreateDeskResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskCreateDeskResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskCreateDeskResp message.
         * @function verify
         * @memberof pb.DeskCreateDeskResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskCreateDeskResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.code != null && message.hasOwnProperty("code"))
                if (!$util.isInteger(message.code))
                    return "code: integer expected";
            if (message.data != null && message.hasOwnProperty("data")) {
                properties._data = 1;
                {
                    var error = $root.pb.DeskCreateDeskInfo.verify(message.data);
                    if (error)
                        return "data." + error;
                }
            }
            return null;
        };

        /**
         * Creates a DeskCreateDeskResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskCreateDeskResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskCreateDeskResp} DeskCreateDeskResp
         */
        DeskCreateDeskResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskCreateDeskResp)
                return object;
            var message = new $root.pb.DeskCreateDeskResp();
            if (object.code != null)
                message.code = object.code | 0;
            if (object.data != null) {
                if (typeof object.data !== "object")
                    throw TypeError(".pb.DeskCreateDeskResp.data: object expected");
                message.data = $root.pb.DeskCreateDeskInfo.fromObject(object.data);
            }
            return message;
        };

        /**
         * Creates a plain object from a DeskCreateDeskResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskCreateDeskResp
         * @static
         * @param {pb.DeskCreateDeskResp} message DeskCreateDeskResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskCreateDeskResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.code = 0;
            if (message.code != null && message.hasOwnProperty("code"))
                object.code = message.code;
            if (message.data != null && message.hasOwnProperty("data")) {
                object.data = $root.pb.DeskCreateDeskInfo.toObject(message.data, options);
                if (options.oneofs)
                    object._data = "data";
            }
            return object;
        };

        /**
         * Converts this DeskCreateDeskResp to JSON.
         * @function toJSON
         * @memberof pb.DeskCreateDeskResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskCreateDeskResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskCreateDeskResp
         * @function getTypeUrl
         * @memberof pb.DeskCreateDeskResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskCreateDeskResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskCreateDeskResp";
        };

        return DeskCreateDeskResp;
    })();

    pb.DeskCreateDeskInfo = (function() {

        /**
         * Properties of a DeskCreateDeskInfo.
         * @memberof pb
         * @interface IDeskCreateDeskInfo
         * @property {pb.IDeskInfo|null} [deskInfo] DeskCreateDeskInfo deskInfo
         * @property {pb.IPlayerInfo|null} [playerInfo] DeskCreateDeskInfo playerInfo
         */

        /**
         * Constructs a new DeskCreateDeskInfo.
         * @memberof pb
         * @classdesc Represents a DeskCreateDeskInfo.
         * @implements IDeskCreateDeskInfo
         * @constructor
         * @param {pb.IDeskCreateDeskInfo=} [properties] Properties to set
         */
        function DeskCreateDeskInfo(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskCreateDeskInfo deskInfo.
         * @member {pb.IDeskInfo|null|undefined} deskInfo
         * @memberof pb.DeskCreateDeskInfo
         * @instance
         */
        DeskCreateDeskInfo.prototype.deskInfo = null;

        /**
         * DeskCreateDeskInfo playerInfo.
         * @member {pb.IPlayerInfo|null|undefined} playerInfo
         * @memberof pb.DeskCreateDeskInfo
         * @instance
         */
        DeskCreateDeskInfo.prototype.playerInfo = null;

        /**
         * Creates a new DeskCreateDeskInfo instance using the specified properties.
         * @function create
         * @memberof pb.DeskCreateDeskInfo
         * @static
         * @param {pb.IDeskCreateDeskInfo=} [properties] Properties to set
         * @returns {pb.DeskCreateDeskInfo} DeskCreateDeskInfo instance
         */
        DeskCreateDeskInfo.create = function create(properties) {
            return new DeskCreateDeskInfo(properties);
        };

        /**
         * Encodes the specified DeskCreateDeskInfo message. Does not implicitly {@link pb.DeskCreateDeskInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskCreateDeskInfo
         * @static
         * @param {pb.IDeskCreateDeskInfo} message DeskCreateDeskInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskCreateDeskInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.deskInfo != null && Object.hasOwnProperty.call(message, "deskInfo"))
                $root.pb.DeskInfo.encode(message.deskInfo, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.playerInfo != null && Object.hasOwnProperty.call(message, "playerInfo"))
                $root.pb.PlayerInfo.encode(message.playerInfo, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DeskCreateDeskInfo message, length delimited. Does not implicitly {@link pb.DeskCreateDeskInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskCreateDeskInfo
         * @static
         * @param {pb.IDeskCreateDeskInfo} message DeskCreateDeskInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskCreateDeskInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskCreateDeskInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskCreateDeskInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskCreateDeskInfo} DeskCreateDeskInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskCreateDeskInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskCreateDeskInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.deskInfo = $root.pb.DeskInfo.decode(reader, reader.uint32());
                        break;
                    }
                case 2: {
                        message.playerInfo = $root.pb.PlayerInfo.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskCreateDeskInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskCreateDeskInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskCreateDeskInfo} DeskCreateDeskInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskCreateDeskInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskCreateDeskInfo message.
         * @function verify
         * @memberof pb.DeskCreateDeskInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskCreateDeskInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.deskInfo != null && message.hasOwnProperty("deskInfo")) {
                var error = $root.pb.DeskInfo.verify(message.deskInfo);
                if (error)
                    return "deskInfo." + error;
            }
            if (message.playerInfo != null && message.hasOwnProperty("playerInfo")) {
                var error = $root.pb.PlayerInfo.verify(message.playerInfo);
                if (error)
                    return "playerInfo." + error;
            }
            return null;
        };

        /**
         * Creates a DeskCreateDeskInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskCreateDeskInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskCreateDeskInfo} DeskCreateDeskInfo
         */
        DeskCreateDeskInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskCreateDeskInfo)
                return object;
            var message = new $root.pb.DeskCreateDeskInfo();
            if (object.deskInfo != null) {
                if (typeof object.deskInfo !== "object")
                    throw TypeError(".pb.DeskCreateDeskInfo.deskInfo: object expected");
                message.deskInfo = $root.pb.DeskInfo.fromObject(object.deskInfo);
            }
            if (object.playerInfo != null) {
                if (typeof object.playerInfo !== "object")
                    throw TypeError(".pb.DeskCreateDeskInfo.playerInfo: object expected");
                message.playerInfo = $root.pb.PlayerInfo.fromObject(object.playerInfo);
            }
            return message;
        };

        /**
         * Creates a plain object from a DeskCreateDeskInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskCreateDeskInfo
         * @static
         * @param {pb.DeskCreateDeskInfo} message DeskCreateDeskInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskCreateDeskInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.deskInfo = null;
                object.playerInfo = null;
            }
            if (message.deskInfo != null && message.hasOwnProperty("deskInfo"))
                object.deskInfo = $root.pb.DeskInfo.toObject(message.deskInfo, options);
            if (message.playerInfo != null && message.hasOwnProperty("playerInfo"))
                object.playerInfo = $root.pb.PlayerInfo.toObject(message.playerInfo, options);
            return object;
        };

        /**
         * Converts this DeskCreateDeskInfo to JSON.
         * @function toJSON
         * @memberof pb.DeskCreateDeskInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskCreateDeskInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskCreateDeskInfo
         * @function getTypeUrl
         * @memberof pb.DeskCreateDeskInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskCreateDeskInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskCreateDeskInfo";
        };

        return DeskCreateDeskInfo;
    })();

    pb.PlayerInfo = (function() {

        /**
         * Properties of a PlayerInfo.
         * @memberof pb
         * @interface IPlayerInfo
         * @property {pb.IPlayerModel|null} [playerInfo] PlayerInfo playerInfo
         * @property {pb.IPlayerDeskInfo|null} [playerDeskInfo] PlayerInfo playerDeskInfo
         */

        /**
         * Constructs a new PlayerInfo.
         * @memberof pb
         * @classdesc Represents a PlayerInfo.
         * @implements IPlayerInfo
         * @constructor
         * @param {pb.IPlayerInfo=} [properties] Properties to set
         */
        function PlayerInfo(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * PlayerInfo playerInfo.
         * @member {pb.IPlayerModel|null|undefined} playerInfo
         * @memberof pb.PlayerInfo
         * @instance
         */
        PlayerInfo.prototype.playerInfo = null;

        /**
         * PlayerInfo playerDeskInfo.
         * @member {pb.IPlayerDeskInfo|null|undefined} playerDeskInfo
         * @memberof pb.PlayerInfo
         * @instance
         */
        PlayerInfo.prototype.playerDeskInfo = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * PlayerInfo _playerDeskInfo.
         * @member {"playerDeskInfo"|undefined} _playerDeskInfo
         * @memberof pb.PlayerInfo
         * @instance
         */
        Object.defineProperty(PlayerInfo.prototype, "_playerDeskInfo", {
            get: $util.oneOfGetter($oneOfFields = ["playerDeskInfo"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new PlayerInfo instance using the specified properties.
         * @function create
         * @memberof pb.PlayerInfo
         * @static
         * @param {pb.IPlayerInfo=} [properties] Properties to set
         * @returns {pb.PlayerInfo} PlayerInfo instance
         */
        PlayerInfo.create = function create(properties) {
            return new PlayerInfo(properties);
        };

        /**
         * Encodes the specified PlayerInfo message. Does not implicitly {@link pb.PlayerInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.PlayerInfo
         * @static
         * @param {pb.IPlayerInfo} message PlayerInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.playerInfo != null && Object.hasOwnProperty.call(message, "playerInfo"))
                $root.pb.PlayerModel.encode(message.playerInfo, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.playerDeskInfo != null && Object.hasOwnProperty.call(message, "playerDeskInfo"))
                $root.pb.PlayerDeskInfo.encode(message.playerDeskInfo, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified PlayerInfo message, length delimited. Does not implicitly {@link pb.PlayerInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.PlayerInfo
         * @static
         * @param {pb.IPlayerInfo} message PlayerInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a PlayerInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.PlayerInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.PlayerInfo} PlayerInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.PlayerInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.playerInfo = $root.pb.PlayerModel.decode(reader, reader.uint32());
                        break;
                    }
                case 2: {
                        message.playerDeskInfo = $root.pb.PlayerDeskInfo.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a PlayerInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.PlayerInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.PlayerInfo} PlayerInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a PlayerInfo message.
         * @function verify
         * @memberof pb.PlayerInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        PlayerInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.playerInfo != null && message.hasOwnProperty("playerInfo")) {
                var error = $root.pb.PlayerModel.verify(message.playerInfo);
                if (error)
                    return "playerInfo." + error;
            }
            if (message.playerDeskInfo != null && message.hasOwnProperty("playerDeskInfo")) {
                properties._playerDeskInfo = 1;
                {
                    var error = $root.pb.PlayerDeskInfo.verify(message.playerDeskInfo);
                    if (error)
                        return "playerDeskInfo." + error;
                }
            }
            return null;
        };

        /**
         * Creates a PlayerInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.PlayerInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.PlayerInfo} PlayerInfo
         */
        PlayerInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.PlayerInfo)
                return object;
            var message = new $root.pb.PlayerInfo();
            if (object.playerInfo != null) {
                if (typeof object.playerInfo !== "object")
                    throw TypeError(".pb.PlayerInfo.playerInfo: object expected");
                message.playerInfo = $root.pb.PlayerModel.fromObject(object.playerInfo);
            }
            if (object.playerDeskInfo != null) {
                if (typeof object.playerDeskInfo !== "object")
                    throw TypeError(".pb.PlayerInfo.playerDeskInfo: object expected");
                message.playerDeskInfo = $root.pb.PlayerDeskInfo.fromObject(object.playerDeskInfo);
            }
            return message;
        };

        /**
         * Creates a plain object from a PlayerInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.PlayerInfo
         * @static
         * @param {pb.PlayerInfo} message PlayerInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        PlayerInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.playerInfo = null;
            if (message.playerInfo != null && message.hasOwnProperty("playerInfo"))
                object.playerInfo = $root.pb.PlayerModel.toObject(message.playerInfo, options);
            if (message.playerDeskInfo != null && message.hasOwnProperty("playerDeskInfo")) {
                object.playerDeskInfo = $root.pb.PlayerDeskInfo.toObject(message.playerDeskInfo, options);
                if (options.oneofs)
                    object._playerDeskInfo = "playerDeskInfo";
            }
            return object;
        };

        /**
         * Converts this PlayerInfo to JSON.
         * @function toJSON
         * @memberof pb.PlayerInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        PlayerInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for PlayerInfo
         * @function getTypeUrl
         * @memberof pb.PlayerInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        PlayerInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.PlayerInfo";
        };

        return PlayerInfo;
    })();

    pb.PlayerDeskInfo = (function() {

        /**
         * Properties of a PlayerDeskInfo.
         * @memberof pb
         * @interface IPlayerDeskInfo
         * @property {boolean|null} [isCreator] PlayerDeskInfo isCreator
         * @property {number|null} [pos] PlayerDeskInfo pos
         * @property {boolean|null} [isReady] PlayerDeskInfo isReady
         */

        /**
         * Constructs a new PlayerDeskInfo.
         * @memberof pb
         * @classdesc Represents a PlayerDeskInfo.
         * @implements IPlayerDeskInfo
         * @constructor
         * @param {pb.IPlayerDeskInfo=} [properties] Properties to set
         */
        function PlayerDeskInfo(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * PlayerDeskInfo isCreator.
         * @member {boolean} isCreator
         * @memberof pb.PlayerDeskInfo
         * @instance
         */
        PlayerDeskInfo.prototype.isCreator = false;

        /**
         * PlayerDeskInfo pos.
         * @member {number} pos
         * @memberof pb.PlayerDeskInfo
         * @instance
         */
        PlayerDeskInfo.prototype.pos = 0;

        /**
         * PlayerDeskInfo isReady.
         * @member {boolean} isReady
         * @memberof pb.PlayerDeskInfo
         * @instance
         */
        PlayerDeskInfo.prototype.isReady = false;

        /**
         * Creates a new PlayerDeskInfo instance using the specified properties.
         * @function create
         * @memberof pb.PlayerDeskInfo
         * @static
         * @param {pb.IPlayerDeskInfo=} [properties] Properties to set
         * @returns {pb.PlayerDeskInfo} PlayerDeskInfo instance
         */
        PlayerDeskInfo.create = function create(properties) {
            return new PlayerDeskInfo(properties);
        };

        /**
         * Encodes the specified PlayerDeskInfo message. Does not implicitly {@link pb.PlayerDeskInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.PlayerDeskInfo
         * @static
         * @param {pb.IPlayerDeskInfo} message PlayerDeskInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerDeskInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.isCreator != null && Object.hasOwnProperty.call(message, "isCreator"))
                writer.uint32(/* id 1, wireType 0 =*/8).bool(message.isCreator);
            if (message.pos != null && Object.hasOwnProperty.call(message, "pos"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.pos);
            if (message.isReady != null && Object.hasOwnProperty.call(message, "isReady"))
                writer.uint32(/* id 3, wireType 0 =*/24).bool(message.isReady);
            return writer;
        };

        /**
         * Encodes the specified PlayerDeskInfo message, length delimited. Does not implicitly {@link pb.PlayerDeskInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.PlayerDeskInfo
         * @static
         * @param {pb.IPlayerDeskInfo} message PlayerDeskInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerDeskInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a PlayerDeskInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.PlayerDeskInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.PlayerDeskInfo} PlayerDeskInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerDeskInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.PlayerDeskInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.isCreator = reader.bool();
                        break;
                    }
                case 2: {
                        message.pos = reader.int32();
                        break;
                    }
                case 3: {
                        message.isReady = reader.bool();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a PlayerDeskInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.PlayerDeskInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.PlayerDeskInfo} PlayerDeskInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerDeskInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a PlayerDeskInfo message.
         * @function verify
         * @memberof pb.PlayerDeskInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        PlayerDeskInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.isCreator != null && message.hasOwnProperty("isCreator"))
                if (typeof message.isCreator !== "boolean")
                    return "isCreator: boolean expected";
            if (message.pos != null && message.hasOwnProperty("pos"))
                if (!$util.isInteger(message.pos))
                    return "pos: integer expected";
            if (message.isReady != null && message.hasOwnProperty("isReady"))
                if (typeof message.isReady !== "boolean")
                    return "isReady: boolean expected";
            return null;
        };

        /**
         * Creates a PlayerDeskInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.PlayerDeskInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.PlayerDeskInfo} PlayerDeskInfo
         */
        PlayerDeskInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.PlayerDeskInfo)
                return object;
            var message = new $root.pb.PlayerDeskInfo();
            if (object.isCreator != null)
                message.isCreator = Boolean(object.isCreator);
            if (object.pos != null)
                message.pos = object.pos | 0;
            if (object.isReady != null)
                message.isReady = Boolean(object.isReady);
            return message;
        };

        /**
         * Creates a plain object from a PlayerDeskInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.PlayerDeskInfo
         * @static
         * @param {pb.PlayerDeskInfo} message PlayerDeskInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        PlayerDeskInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.isCreator = false;
                object.pos = 0;
                object.isReady = false;
            }
            if (message.isCreator != null && message.hasOwnProperty("isCreator"))
                object.isCreator = message.isCreator;
            if (message.pos != null && message.hasOwnProperty("pos"))
                object.pos = message.pos;
            if (message.isReady != null && message.hasOwnProperty("isReady"))
                object.isReady = message.isReady;
            return object;
        };

        /**
         * Converts this PlayerDeskInfo to JSON.
         * @function toJSON
         * @memberof pb.PlayerDeskInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        PlayerDeskInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for PlayerDeskInfo
         * @function getTypeUrl
         * @memberof pb.PlayerDeskInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        PlayerDeskInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.PlayerDeskInfo";
        };

        return PlayerDeskInfo;
    })();

    pb.PlayerModel = (function() {

        /**
         * Properties of a PlayerModel.
         * @memberof pb
         * @interface IPlayerModel
         * @property {number|Long|null} [shortId] PlayerModel shortId
         * @property {string|null} [nickname] PlayerModel nickname
         * @property {number|null} [usedHeroId] PlayerModel usedHeroId
         * @property {string|null} [avatar] PlayerModel avatar
         * @property {number|null} [sex] PlayerModel sex
         * @property {number|Long|null} [gem] PlayerModel gem
         * @property {number|Long|null} [ruby] PlayerModel ruby
         */

        /**
         * Constructs a new PlayerModel.
         * @memberof pb
         * @classdesc Represents a PlayerModel.
         * @implements IPlayerModel
         * @constructor
         * @param {pb.IPlayerModel=} [properties] Properties to set
         */
        function PlayerModel(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * PlayerModel shortId.
         * @member {number|Long|null|undefined} shortId
         * @memberof pb.PlayerModel
         * @instance
         */
        PlayerModel.prototype.shortId = null;

        /**
         * PlayerModel nickname.
         * @member {string|null|undefined} nickname
         * @memberof pb.PlayerModel
         * @instance
         */
        PlayerModel.prototype.nickname = null;

        /**
         * PlayerModel usedHeroId.
         * @member {number|null|undefined} usedHeroId
         * @memberof pb.PlayerModel
         * @instance
         */
        PlayerModel.prototype.usedHeroId = null;

        /**
         * PlayerModel avatar.
         * @member {string|null|undefined} avatar
         * @memberof pb.PlayerModel
         * @instance
         */
        PlayerModel.prototype.avatar = null;

        /**
         * PlayerModel sex.
         * @member {number|null|undefined} sex
         * @memberof pb.PlayerModel
         * @instance
         */
        PlayerModel.prototype.sex = null;

        /**
         * PlayerModel gem.
         * @member {number|Long|null|undefined} gem
         * @memberof pb.PlayerModel
         * @instance
         */
        PlayerModel.prototype.gem = null;

        /**
         * PlayerModel ruby.
         * @member {number|Long|null|undefined} ruby
         * @memberof pb.PlayerModel
         * @instance
         */
        PlayerModel.prototype.ruby = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * PlayerModel _shortId.
         * @member {"shortId"|undefined} _shortId
         * @memberof pb.PlayerModel
         * @instance
         */
        Object.defineProperty(PlayerModel.prototype, "_shortId", {
            get: $util.oneOfGetter($oneOfFields = ["shortId"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * PlayerModel _nickname.
         * @member {"nickname"|undefined} _nickname
         * @memberof pb.PlayerModel
         * @instance
         */
        Object.defineProperty(PlayerModel.prototype, "_nickname", {
            get: $util.oneOfGetter($oneOfFields = ["nickname"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * PlayerModel _usedHeroId.
         * @member {"usedHeroId"|undefined} _usedHeroId
         * @memberof pb.PlayerModel
         * @instance
         */
        Object.defineProperty(PlayerModel.prototype, "_usedHeroId", {
            get: $util.oneOfGetter($oneOfFields = ["usedHeroId"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * PlayerModel _avatar.
         * @member {"avatar"|undefined} _avatar
         * @memberof pb.PlayerModel
         * @instance
         */
        Object.defineProperty(PlayerModel.prototype, "_avatar", {
            get: $util.oneOfGetter($oneOfFields = ["avatar"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * PlayerModel _sex.
         * @member {"sex"|undefined} _sex
         * @memberof pb.PlayerModel
         * @instance
         */
        Object.defineProperty(PlayerModel.prototype, "_sex", {
            get: $util.oneOfGetter($oneOfFields = ["sex"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * PlayerModel _gem.
         * @member {"gem"|undefined} _gem
         * @memberof pb.PlayerModel
         * @instance
         */
        Object.defineProperty(PlayerModel.prototype, "_gem", {
            get: $util.oneOfGetter($oneOfFields = ["gem"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * PlayerModel _ruby.
         * @member {"ruby"|undefined} _ruby
         * @memberof pb.PlayerModel
         * @instance
         */
        Object.defineProperty(PlayerModel.prototype, "_ruby", {
            get: $util.oneOfGetter($oneOfFields = ["ruby"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new PlayerModel instance using the specified properties.
         * @function create
         * @memberof pb.PlayerModel
         * @static
         * @param {pb.IPlayerModel=} [properties] Properties to set
         * @returns {pb.PlayerModel} PlayerModel instance
         */
        PlayerModel.create = function create(properties) {
            return new PlayerModel(properties);
        };

        /**
         * Encodes the specified PlayerModel message. Does not implicitly {@link pb.PlayerModel.verify|verify} messages.
         * @function encode
         * @memberof pb.PlayerModel
         * @static
         * @param {pb.IPlayerModel} message PlayerModel message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerModel.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.shortId != null && Object.hasOwnProperty.call(message, "shortId"))
                writer.uint32(/* id 2, wireType 0 =*/16).int64(message.shortId);
            if (message.nickname != null && Object.hasOwnProperty.call(message, "nickname"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.nickname);
            if (message.usedHeroId != null && Object.hasOwnProperty.call(message, "usedHeroId"))
                writer.uint32(/* id 4, wireType 0 =*/32).int32(message.usedHeroId);
            if (message.avatar != null && Object.hasOwnProperty.call(message, "avatar"))
                writer.uint32(/* id 5, wireType 2 =*/42).string(message.avatar);
            if (message.sex != null && Object.hasOwnProperty.call(message, "sex"))
                writer.uint32(/* id 6, wireType 0 =*/48).int32(message.sex);
            if (message.gem != null && Object.hasOwnProperty.call(message, "gem"))
                writer.uint32(/* id 7, wireType 0 =*/56).int64(message.gem);
            if (message.ruby != null && Object.hasOwnProperty.call(message, "ruby"))
                writer.uint32(/* id 8, wireType 0 =*/64).int64(message.ruby);
            return writer;
        };

        /**
         * Encodes the specified PlayerModel message, length delimited. Does not implicitly {@link pb.PlayerModel.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.PlayerModel
         * @static
         * @param {pb.IPlayerModel} message PlayerModel message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerModel.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a PlayerModel message from the specified reader or buffer.
         * @function decode
         * @memberof pb.PlayerModel
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.PlayerModel} PlayerModel
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerModel.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.PlayerModel();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 2: {
                        message.shortId = reader.int64();
                        break;
                    }
                case 3: {
                        message.nickname = reader.string();
                        break;
                    }
                case 4: {
                        message.usedHeroId = reader.int32();
                        break;
                    }
                case 5: {
                        message.avatar = reader.string();
                        break;
                    }
                case 6: {
                        message.sex = reader.int32();
                        break;
                    }
                case 7: {
                        message.gem = reader.int64();
                        break;
                    }
                case 8: {
                        message.ruby = reader.int64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a PlayerModel message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.PlayerModel
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.PlayerModel} PlayerModel
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerModel.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a PlayerModel message.
         * @function verify
         * @memberof pb.PlayerModel
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        PlayerModel.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.shortId != null && message.hasOwnProperty("shortId")) {
                properties._shortId = 1;
                if (!$util.isInteger(message.shortId) && !(message.shortId && $util.isInteger(message.shortId.low) && $util.isInteger(message.shortId.high)))
                    return "shortId: integer|Long expected";
            }
            if (message.nickname != null && message.hasOwnProperty("nickname")) {
                properties._nickname = 1;
                if (!$util.isString(message.nickname))
                    return "nickname: string expected";
            }
            if (message.usedHeroId != null && message.hasOwnProperty("usedHeroId")) {
                properties._usedHeroId = 1;
                if (!$util.isInteger(message.usedHeroId))
                    return "usedHeroId: integer expected";
            }
            if (message.avatar != null && message.hasOwnProperty("avatar")) {
                properties._avatar = 1;
                if (!$util.isString(message.avatar))
                    return "avatar: string expected";
            }
            if (message.sex != null && message.hasOwnProperty("sex")) {
                properties._sex = 1;
                if (!$util.isInteger(message.sex))
                    return "sex: integer expected";
            }
            if (message.gem != null && message.hasOwnProperty("gem")) {
                properties._gem = 1;
                if (!$util.isInteger(message.gem) && !(message.gem && $util.isInteger(message.gem.low) && $util.isInteger(message.gem.high)))
                    return "gem: integer|Long expected";
            }
            if (message.ruby != null && message.hasOwnProperty("ruby")) {
                properties._ruby = 1;
                if (!$util.isInteger(message.ruby) && !(message.ruby && $util.isInteger(message.ruby.low) && $util.isInteger(message.ruby.high)))
                    return "ruby: integer|Long expected";
            }
            return null;
        };

        /**
         * Creates a PlayerModel message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.PlayerModel
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.PlayerModel} PlayerModel
         */
        PlayerModel.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.PlayerModel)
                return object;
            var message = new $root.pb.PlayerModel();
            if (object.shortId != null)
                if ($util.Long)
                    (message.shortId = $util.Long.fromValue(object.shortId)).unsigned = false;
                else if (typeof object.shortId === "string")
                    message.shortId = parseInt(object.shortId, 10);
                else if (typeof object.shortId === "number")
                    message.shortId = object.shortId;
                else if (typeof object.shortId === "object")
                    message.shortId = new $util.LongBits(object.shortId.low >>> 0, object.shortId.high >>> 0).toNumber();
            if (object.nickname != null)
                message.nickname = String(object.nickname);
            if (object.usedHeroId != null)
                message.usedHeroId = object.usedHeroId | 0;
            if (object.avatar != null)
                message.avatar = String(object.avatar);
            if (object.sex != null)
                message.sex = object.sex | 0;
            if (object.gem != null)
                if ($util.Long)
                    (message.gem = $util.Long.fromValue(object.gem)).unsigned = false;
                else if (typeof object.gem === "string")
                    message.gem = parseInt(object.gem, 10);
                else if (typeof object.gem === "number")
                    message.gem = object.gem;
                else if (typeof object.gem === "object")
                    message.gem = new $util.LongBits(object.gem.low >>> 0, object.gem.high >>> 0).toNumber();
            if (object.ruby != null)
                if ($util.Long)
                    (message.ruby = $util.Long.fromValue(object.ruby)).unsigned = false;
                else if (typeof object.ruby === "string")
                    message.ruby = parseInt(object.ruby, 10);
                else if (typeof object.ruby === "number")
                    message.ruby = object.ruby;
                else if (typeof object.ruby === "object")
                    message.ruby = new $util.LongBits(object.ruby.low >>> 0, object.ruby.high >>> 0).toNumber();
            return message;
        };

        /**
         * Creates a plain object from a PlayerModel message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.PlayerModel
         * @static
         * @param {pb.PlayerModel} message PlayerModel
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        PlayerModel.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (message.shortId != null && message.hasOwnProperty("shortId")) {
                if (typeof message.shortId === "number")
                    object.shortId = options.longs === String ? String(message.shortId) : message.shortId;
                else
                    object.shortId = options.longs === String ? $util.Long.prototype.toString.call(message.shortId) : options.longs === Number ? new $util.LongBits(message.shortId.low >>> 0, message.shortId.high >>> 0).toNumber() : message.shortId;
                if (options.oneofs)
                    object._shortId = "shortId";
            }
            if (message.nickname != null && message.hasOwnProperty("nickname")) {
                object.nickname = message.nickname;
                if (options.oneofs)
                    object._nickname = "nickname";
            }
            if (message.usedHeroId != null && message.hasOwnProperty("usedHeroId")) {
                object.usedHeroId = message.usedHeroId;
                if (options.oneofs)
                    object._usedHeroId = "usedHeroId";
            }
            if (message.avatar != null && message.hasOwnProperty("avatar")) {
                object.avatar = message.avatar;
                if (options.oneofs)
                    object._avatar = "avatar";
            }
            if (message.sex != null && message.hasOwnProperty("sex")) {
                object.sex = message.sex;
                if (options.oneofs)
                    object._sex = "sex";
            }
            if (message.gem != null && message.hasOwnProperty("gem")) {
                if (typeof message.gem === "number")
                    object.gem = options.longs === String ? String(message.gem) : message.gem;
                else
                    object.gem = options.longs === String ? $util.Long.prototype.toString.call(message.gem) : options.longs === Number ? new $util.LongBits(message.gem.low >>> 0, message.gem.high >>> 0).toNumber() : message.gem;
                if (options.oneofs)
                    object._gem = "gem";
            }
            if (message.ruby != null && message.hasOwnProperty("ruby")) {
                if (typeof message.ruby === "number")
                    object.ruby = options.longs === String ? String(message.ruby) : message.ruby;
                else
                    object.ruby = options.longs === String ? $util.Long.prototype.toString.call(message.ruby) : options.longs === Number ? new $util.LongBits(message.ruby.low >>> 0, message.ruby.high >>> 0).toNumber() : message.ruby;
                if (options.oneofs)
                    object._ruby = "ruby";
            }
            return object;
        };

        /**
         * Converts this PlayerModel to JSON.
         * @function toJSON
         * @memberof pb.PlayerModel
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        PlayerModel.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for PlayerModel
         * @function getTypeUrl
         * @memberof pb.PlayerModel
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        PlayerModel.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.PlayerModel";
        };

        return PlayerModel;
    })();

    pb.DeskDissolvePushResp = (function() {

        /**
         * Properties of a DeskDissolvePushResp.
         * @memberof pb
         * @interface IDeskDissolvePushResp
         * @property {number|Long|null} [dissolveInitiator] DeskDissolvePushResp dissolveInitiator
         */

        /**
         * Constructs a new DeskDissolvePushResp.
         * @memberof pb
         * @classdesc Represents a DeskDissolvePushResp.
         * @implements IDeskDissolvePushResp
         * @constructor
         * @param {pb.IDeskDissolvePushResp=} [properties] Properties to set
         */
        function DeskDissolvePushResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskDissolvePushResp dissolveInitiator.
         * @member {number|Long} dissolveInitiator
         * @memberof pb.DeskDissolvePushResp
         * @instance
         */
        DeskDissolvePushResp.prototype.dissolveInitiator = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * Creates a new DeskDissolvePushResp instance using the specified properties.
         * @function create
         * @memberof pb.DeskDissolvePushResp
         * @static
         * @param {pb.IDeskDissolvePushResp=} [properties] Properties to set
         * @returns {pb.DeskDissolvePushResp} DeskDissolvePushResp instance
         */
        DeskDissolvePushResp.create = function create(properties) {
            return new DeskDissolvePushResp(properties);
        };

        /**
         * Encodes the specified DeskDissolvePushResp message. Does not implicitly {@link pb.DeskDissolvePushResp.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskDissolvePushResp
         * @static
         * @param {pb.IDeskDissolvePushResp} message DeskDissolvePushResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskDissolvePushResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.dissolveInitiator != null && Object.hasOwnProperty.call(message, "dissolveInitiator"))
                writer.uint32(/* id 1, wireType 0 =*/8).int64(message.dissolveInitiator);
            return writer;
        };

        /**
         * Encodes the specified DeskDissolvePushResp message, length delimited. Does not implicitly {@link pb.DeskDissolvePushResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskDissolvePushResp
         * @static
         * @param {pb.IDeskDissolvePushResp} message DeskDissolvePushResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskDissolvePushResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskDissolvePushResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskDissolvePushResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskDissolvePushResp} DeskDissolvePushResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskDissolvePushResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskDissolvePushResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.dissolveInitiator = reader.int64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskDissolvePushResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskDissolvePushResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskDissolvePushResp} DeskDissolvePushResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskDissolvePushResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskDissolvePushResp message.
         * @function verify
         * @memberof pb.DeskDissolvePushResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskDissolvePushResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.dissolveInitiator != null && message.hasOwnProperty("dissolveInitiator"))
                if (!$util.isInteger(message.dissolveInitiator) && !(message.dissolveInitiator && $util.isInteger(message.dissolveInitiator.low) && $util.isInteger(message.dissolveInitiator.high)))
                    return "dissolveInitiator: integer|Long expected";
            return null;
        };

        /**
         * Creates a DeskDissolvePushResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskDissolvePushResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskDissolvePushResp} DeskDissolvePushResp
         */
        DeskDissolvePushResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskDissolvePushResp)
                return object;
            var message = new $root.pb.DeskDissolvePushResp();
            if (object.dissolveInitiator != null)
                if ($util.Long)
                    (message.dissolveInitiator = $util.Long.fromValue(object.dissolveInitiator)).unsigned = false;
                else if (typeof object.dissolveInitiator === "string")
                    message.dissolveInitiator = parseInt(object.dissolveInitiator, 10);
                else if (typeof object.dissolveInitiator === "number")
                    message.dissolveInitiator = object.dissolveInitiator;
                else if (typeof object.dissolveInitiator === "object")
                    message.dissolveInitiator = new $util.LongBits(object.dissolveInitiator.low >>> 0, object.dissolveInitiator.high >>> 0).toNumber();
            return message;
        };

        /**
         * Creates a plain object from a DeskDissolvePushResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskDissolvePushResp
         * @static
         * @param {pb.DeskDissolvePushResp} message DeskDissolvePushResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskDissolvePushResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.dissolveInitiator = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.dissolveInitiator = options.longs === String ? "0" : 0;
            if (message.dissolveInitiator != null && message.hasOwnProperty("dissolveInitiator"))
                if (typeof message.dissolveInitiator === "number")
                    object.dissolveInitiator = options.longs === String ? String(message.dissolveInitiator) : message.dissolveInitiator;
                else
                    object.dissolveInitiator = options.longs === String ? $util.Long.prototype.toString.call(message.dissolveInitiator) : options.longs === Number ? new $util.LongBits(message.dissolveInitiator.low >>> 0, message.dissolveInitiator.high >>> 0).toNumber() : message.dissolveInitiator;
            return object;
        };

        /**
         * Converts this DeskDissolvePushResp to JSON.
         * @function toJSON
         * @memberof pb.DeskDissolvePushResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskDissolvePushResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskDissolvePushResp
         * @function getTypeUrl
         * @memberof pb.DeskDissolvePushResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskDissolvePushResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskDissolvePushResp";
        };

        return DeskDissolvePushResp;
    })();

    pb.DeskExitPushResp = (function() {

        /**
         * Properties of a DeskExitPushResp.
         * @memberof pb
         * @interface IDeskExitPushResp
         * @property {number|Long|null} [exitShortId] DeskExitPushResp exitShortId
         */

        /**
         * Constructs a new DeskExitPushResp.
         * @memberof pb
         * @classdesc Represents a DeskExitPushResp.
         * @implements IDeskExitPushResp
         * @constructor
         * @param {pb.IDeskExitPushResp=} [properties] Properties to set
         */
        function DeskExitPushResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskExitPushResp exitShortId.
         * @member {number|Long} exitShortId
         * @memberof pb.DeskExitPushResp
         * @instance
         */
        DeskExitPushResp.prototype.exitShortId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * Creates a new DeskExitPushResp instance using the specified properties.
         * @function create
         * @memberof pb.DeskExitPushResp
         * @static
         * @param {pb.IDeskExitPushResp=} [properties] Properties to set
         * @returns {pb.DeskExitPushResp} DeskExitPushResp instance
         */
        DeskExitPushResp.create = function create(properties) {
            return new DeskExitPushResp(properties);
        };

        /**
         * Encodes the specified DeskExitPushResp message. Does not implicitly {@link pb.DeskExitPushResp.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskExitPushResp
         * @static
         * @param {pb.IDeskExitPushResp} message DeskExitPushResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskExitPushResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.exitShortId != null && Object.hasOwnProperty.call(message, "exitShortId"))
                writer.uint32(/* id 1, wireType 0 =*/8).int64(message.exitShortId);
            return writer;
        };

        /**
         * Encodes the specified DeskExitPushResp message, length delimited. Does not implicitly {@link pb.DeskExitPushResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskExitPushResp
         * @static
         * @param {pb.IDeskExitPushResp} message DeskExitPushResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskExitPushResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskExitPushResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskExitPushResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskExitPushResp} DeskExitPushResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskExitPushResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskExitPushResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.exitShortId = reader.int64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskExitPushResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskExitPushResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskExitPushResp} DeskExitPushResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskExitPushResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskExitPushResp message.
         * @function verify
         * @memberof pb.DeskExitPushResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskExitPushResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.exitShortId != null && message.hasOwnProperty("exitShortId"))
                if (!$util.isInteger(message.exitShortId) && !(message.exitShortId && $util.isInteger(message.exitShortId.low) && $util.isInteger(message.exitShortId.high)))
                    return "exitShortId: integer|Long expected";
            return null;
        };

        /**
         * Creates a DeskExitPushResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskExitPushResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskExitPushResp} DeskExitPushResp
         */
        DeskExitPushResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskExitPushResp)
                return object;
            var message = new $root.pb.DeskExitPushResp();
            if (object.exitShortId != null)
                if ($util.Long)
                    (message.exitShortId = $util.Long.fromValue(object.exitShortId)).unsigned = false;
                else if (typeof object.exitShortId === "string")
                    message.exitShortId = parseInt(object.exitShortId, 10);
                else if (typeof object.exitShortId === "number")
                    message.exitShortId = object.exitShortId;
                else if (typeof object.exitShortId === "object")
                    message.exitShortId = new $util.LongBits(object.exitShortId.low >>> 0, object.exitShortId.high >>> 0).toNumber();
            return message;
        };

        /**
         * Creates a plain object from a DeskExitPushResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskExitPushResp
         * @static
         * @param {pb.DeskExitPushResp} message DeskExitPushResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskExitPushResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.exitShortId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.exitShortId = options.longs === String ? "0" : 0;
            if (message.exitShortId != null && message.hasOwnProperty("exitShortId"))
                if (typeof message.exitShortId === "number")
                    object.exitShortId = options.longs === String ? String(message.exitShortId) : message.exitShortId;
                else
                    object.exitShortId = options.longs === String ? $util.Long.prototype.toString.call(message.exitShortId) : options.longs === Number ? new $util.LongBits(message.exitShortId.low >>> 0, message.exitShortId.high >>> 0).toNumber() : message.exitShortId;
            return object;
        };

        /**
         * Converts this DeskExitPushResp to JSON.
         * @function toJSON
         * @memberof pb.DeskExitPushResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskExitPushResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskExitPushResp
         * @function getTypeUrl
         * @memberof pb.DeskExitPushResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskExitPushResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskExitPushResp";
        };

        return DeskExitPushResp;
    })();

    pb.DeskExitReq = (function() {

        /**
         * Properties of a DeskExitReq.
         * @memberof pb
         * @interface IDeskExitReq
         */

        /**
         * Constructs a new DeskExitReq.
         * @memberof pb
         * @classdesc Represents a DeskExitReq.
         * @implements IDeskExitReq
         * @constructor
         * @param {pb.IDeskExitReq=} [properties] Properties to set
         */
        function DeskExitReq(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * Creates a new DeskExitReq instance using the specified properties.
         * @function create
         * @memberof pb.DeskExitReq
         * @static
         * @param {pb.IDeskExitReq=} [properties] Properties to set
         * @returns {pb.DeskExitReq} DeskExitReq instance
         */
        DeskExitReq.create = function create(properties) {
            return new DeskExitReq(properties);
        };

        /**
         * Encodes the specified DeskExitReq message. Does not implicitly {@link pb.DeskExitReq.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskExitReq
         * @static
         * @param {pb.IDeskExitReq} message DeskExitReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskExitReq.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };

        /**
         * Encodes the specified DeskExitReq message, length delimited. Does not implicitly {@link pb.DeskExitReq.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskExitReq
         * @static
         * @param {pb.IDeskExitReq} message DeskExitReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskExitReq.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskExitReq message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskExitReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskExitReq} DeskExitReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskExitReq.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskExitReq();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskExitReq message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskExitReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskExitReq} DeskExitReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskExitReq.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskExitReq message.
         * @function verify
         * @memberof pb.DeskExitReq
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskExitReq.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };

        /**
         * Creates a DeskExitReq message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskExitReq
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskExitReq} DeskExitReq
         */
        DeskExitReq.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskExitReq)
                return object;
            return new $root.pb.DeskExitReq();
        };

        /**
         * Creates a plain object from a DeskExitReq message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskExitReq
         * @static
         * @param {pb.DeskExitReq} message DeskExitReq
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskExitReq.toObject = function toObject() {
            return {};
        };

        /**
         * Converts this DeskExitReq to JSON.
         * @function toJSON
         * @memberof pb.DeskExitReq
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskExitReq.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskExitReq
         * @function getTypeUrl
         * @memberof pb.DeskExitReq
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskExitReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskExitReq";
        };

        return DeskExitReq;
    })();

    pb.DeskExitResp = (function() {

        /**
         * Properties of a DeskExitResp.
         * @memberof pb
         * @interface IDeskExitResp
         * @property {number|null} [code] DeskExitResp code
         * @property {pb.IDeskExitInfo|null} [data] DeskExitResp data
         */

        /**
         * Constructs a new DeskExitResp.
         * @memberof pb
         * @classdesc Represents a DeskExitResp.
         * @implements IDeskExitResp
         * @constructor
         * @param {pb.IDeskExitResp=} [properties] Properties to set
         */
        function DeskExitResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskExitResp code.
         * @member {number} code
         * @memberof pb.DeskExitResp
         * @instance
         */
        DeskExitResp.prototype.code = 0;

        /**
         * DeskExitResp data.
         * @member {pb.IDeskExitInfo|null|undefined} data
         * @memberof pb.DeskExitResp
         * @instance
         */
        DeskExitResp.prototype.data = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * DeskExitResp _data.
         * @member {"data"|undefined} _data
         * @memberof pb.DeskExitResp
         * @instance
         */
        Object.defineProperty(DeskExitResp.prototype, "_data", {
            get: $util.oneOfGetter($oneOfFields = ["data"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new DeskExitResp instance using the specified properties.
         * @function create
         * @memberof pb.DeskExitResp
         * @static
         * @param {pb.IDeskExitResp=} [properties] Properties to set
         * @returns {pb.DeskExitResp} DeskExitResp instance
         */
        DeskExitResp.create = function create(properties) {
            return new DeskExitResp(properties);
        };

        /**
         * Encodes the specified DeskExitResp message. Does not implicitly {@link pb.DeskExitResp.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskExitResp
         * @static
         * @param {pb.IDeskExitResp} message DeskExitResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskExitResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.code != null && Object.hasOwnProperty.call(message, "code"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.code);
            if (message.data != null && Object.hasOwnProperty.call(message, "data"))
                $root.pb.DeskExitInfo.encode(message.data, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DeskExitResp message, length delimited. Does not implicitly {@link pb.DeskExitResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskExitResp
         * @static
         * @param {pb.IDeskExitResp} message DeskExitResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskExitResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskExitResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskExitResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskExitResp} DeskExitResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskExitResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskExitResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.code = reader.int32();
                        break;
                    }
                case 2: {
                        message.data = $root.pb.DeskExitInfo.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskExitResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskExitResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskExitResp} DeskExitResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskExitResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskExitResp message.
         * @function verify
         * @memberof pb.DeskExitResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskExitResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.code != null && message.hasOwnProperty("code"))
                if (!$util.isInteger(message.code))
                    return "code: integer expected";
            if (message.data != null && message.hasOwnProperty("data")) {
                properties._data = 1;
                {
                    var error = $root.pb.DeskExitInfo.verify(message.data);
                    if (error)
                        return "data." + error;
                }
            }
            return null;
        };

        /**
         * Creates a DeskExitResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskExitResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskExitResp} DeskExitResp
         */
        DeskExitResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskExitResp)
                return object;
            var message = new $root.pb.DeskExitResp();
            if (object.code != null)
                message.code = object.code | 0;
            if (object.data != null) {
                if (typeof object.data !== "object")
                    throw TypeError(".pb.DeskExitResp.data: object expected");
                message.data = $root.pb.DeskExitInfo.fromObject(object.data);
            }
            return message;
        };

        /**
         * Creates a plain object from a DeskExitResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskExitResp
         * @static
         * @param {pb.DeskExitResp} message DeskExitResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskExitResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.code = 0;
            if (message.code != null && message.hasOwnProperty("code"))
                object.code = message.code;
            if (message.data != null && message.hasOwnProperty("data")) {
                object.data = $root.pb.DeskExitInfo.toObject(message.data, options);
                if (options.oneofs)
                    object._data = "data";
            }
            return object;
        };

        /**
         * Converts this DeskExitResp to JSON.
         * @function toJSON
         * @memberof pb.DeskExitResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskExitResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskExitResp
         * @function getTypeUrl
         * @memberof pb.DeskExitResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskExitResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskExitResp";
        };

        return DeskExitResp;
    })();

    pb.DeskExitInfo = (function() {

        /**
         * Properties of a DeskExitInfo.
         * @memberof pb
         * @interface IDeskExitInfo
         */

        /**
         * Constructs a new DeskExitInfo.
         * @memberof pb
         * @classdesc Represents a DeskExitInfo.
         * @implements IDeskExitInfo
         * @constructor
         * @param {pb.IDeskExitInfo=} [properties] Properties to set
         */
        function DeskExitInfo(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * Creates a new DeskExitInfo instance using the specified properties.
         * @function create
         * @memberof pb.DeskExitInfo
         * @static
         * @param {pb.IDeskExitInfo=} [properties] Properties to set
         * @returns {pb.DeskExitInfo} DeskExitInfo instance
         */
        DeskExitInfo.create = function create(properties) {
            return new DeskExitInfo(properties);
        };

        /**
         * Encodes the specified DeskExitInfo message. Does not implicitly {@link pb.DeskExitInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskExitInfo
         * @static
         * @param {pb.IDeskExitInfo} message DeskExitInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskExitInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };

        /**
         * Encodes the specified DeskExitInfo message, length delimited. Does not implicitly {@link pb.DeskExitInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskExitInfo
         * @static
         * @param {pb.IDeskExitInfo} message DeskExitInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskExitInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskExitInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskExitInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskExitInfo} DeskExitInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskExitInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskExitInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskExitInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskExitInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskExitInfo} DeskExitInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskExitInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskExitInfo message.
         * @function verify
         * @memberof pb.DeskExitInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskExitInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };

        /**
         * Creates a DeskExitInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskExitInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskExitInfo} DeskExitInfo
         */
        DeskExitInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskExitInfo)
                return object;
            return new $root.pb.DeskExitInfo();
        };

        /**
         * Creates a plain object from a DeskExitInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskExitInfo
         * @static
         * @param {pb.DeskExitInfo} message DeskExitInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskExitInfo.toObject = function toObject() {
            return {};
        };

        /**
         * Converts this DeskExitInfo to JSON.
         * @function toJSON
         * @memberof pb.DeskExitInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskExitInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskExitInfo
         * @function getTypeUrl
         * @memberof pb.DeskExitInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskExitInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskExitInfo";
        };

        return DeskExitInfo;
    })();

    pb.DeskJoinPushResp = (function() {

        /**
         * Properties of a DeskJoinPushResp.
         * @memberof pb
         * @interface IDeskJoinPushResp
         * @property {pb.IPlayerInfo|null} [newPlayer] DeskJoinPushResp newPlayer
         */

        /**
         * Constructs a new DeskJoinPushResp.
         * @memberof pb
         * @classdesc Represents a DeskJoinPushResp.
         * @implements IDeskJoinPushResp
         * @constructor
         * @param {pb.IDeskJoinPushResp=} [properties] Properties to set
         */
        function DeskJoinPushResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskJoinPushResp newPlayer.
         * @member {pb.IPlayerInfo|null|undefined} newPlayer
         * @memberof pb.DeskJoinPushResp
         * @instance
         */
        DeskJoinPushResp.prototype.newPlayer = null;

        /**
         * Creates a new DeskJoinPushResp instance using the specified properties.
         * @function create
         * @memberof pb.DeskJoinPushResp
         * @static
         * @param {pb.IDeskJoinPushResp=} [properties] Properties to set
         * @returns {pb.DeskJoinPushResp} DeskJoinPushResp instance
         */
        DeskJoinPushResp.create = function create(properties) {
            return new DeskJoinPushResp(properties);
        };

        /**
         * Encodes the specified DeskJoinPushResp message. Does not implicitly {@link pb.DeskJoinPushResp.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskJoinPushResp
         * @static
         * @param {pb.IDeskJoinPushResp} message DeskJoinPushResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskJoinPushResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.newPlayer != null && Object.hasOwnProperty.call(message, "newPlayer"))
                $root.pb.PlayerInfo.encode(message.newPlayer, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DeskJoinPushResp message, length delimited. Does not implicitly {@link pb.DeskJoinPushResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskJoinPushResp
         * @static
         * @param {pb.IDeskJoinPushResp} message DeskJoinPushResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskJoinPushResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskJoinPushResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskJoinPushResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskJoinPushResp} DeskJoinPushResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskJoinPushResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskJoinPushResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.newPlayer = $root.pb.PlayerInfo.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskJoinPushResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskJoinPushResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskJoinPushResp} DeskJoinPushResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskJoinPushResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskJoinPushResp message.
         * @function verify
         * @memberof pb.DeskJoinPushResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskJoinPushResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.newPlayer != null && message.hasOwnProperty("newPlayer")) {
                var error = $root.pb.PlayerInfo.verify(message.newPlayer);
                if (error)
                    return "newPlayer." + error;
            }
            return null;
        };

        /**
         * Creates a DeskJoinPushResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskJoinPushResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskJoinPushResp} DeskJoinPushResp
         */
        DeskJoinPushResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskJoinPushResp)
                return object;
            var message = new $root.pb.DeskJoinPushResp();
            if (object.newPlayer != null) {
                if (typeof object.newPlayer !== "object")
                    throw TypeError(".pb.DeskJoinPushResp.newPlayer: object expected");
                message.newPlayer = $root.pb.PlayerInfo.fromObject(object.newPlayer);
            }
            return message;
        };

        /**
         * Creates a plain object from a DeskJoinPushResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskJoinPushResp
         * @static
         * @param {pb.DeskJoinPushResp} message DeskJoinPushResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskJoinPushResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.newPlayer = null;
            if (message.newPlayer != null && message.hasOwnProperty("newPlayer"))
                object.newPlayer = $root.pb.PlayerInfo.toObject(message.newPlayer, options);
            return object;
        };

        /**
         * Converts this DeskJoinPushResp to JSON.
         * @function toJSON
         * @memberof pb.DeskJoinPushResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskJoinPushResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskJoinPushResp
         * @function getTypeUrl
         * @memberof pb.DeskJoinPushResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskJoinPushResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskJoinPushResp";
        };

        return DeskJoinPushResp;
    })();

    pb.DeskJoinReq = (function() {

        /**
         * Properties of a DeskJoinReq.
         * @memberof pb
         * @interface IDeskJoinReq
         * @property {string|null} [deskNo] DeskJoinReq deskNo
         */

        /**
         * Constructs a new DeskJoinReq.
         * @memberof pb
         * @classdesc Represents a DeskJoinReq.
         * @implements IDeskJoinReq
         * @constructor
         * @param {pb.IDeskJoinReq=} [properties] Properties to set
         */
        function DeskJoinReq(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskJoinReq deskNo.
         * @member {string} deskNo
         * @memberof pb.DeskJoinReq
         * @instance
         */
        DeskJoinReq.prototype.deskNo = "";

        /**
         * Creates a new DeskJoinReq instance using the specified properties.
         * @function create
         * @memberof pb.DeskJoinReq
         * @static
         * @param {pb.IDeskJoinReq=} [properties] Properties to set
         * @returns {pb.DeskJoinReq} DeskJoinReq instance
         */
        DeskJoinReq.create = function create(properties) {
            return new DeskJoinReq(properties);
        };

        /**
         * Encodes the specified DeskJoinReq message. Does not implicitly {@link pb.DeskJoinReq.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskJoinReq
         * @static
         * @param {pb.IDeskJoinReq} message DeskJoinReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskJoinReq.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.deskNo != null && Object.hasOwnProperty.call(message, "deskNo"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.deskNo);
            return writer;
        };

        /**
         * Encodes the specified DeskJoinReq message, length delimited. Does not implicitly {@link pb.DeskJoinReq.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskJoinReq
         * @static
         * @param {pb.IDeskJoinReq} message DeskJoinReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskJoinReq.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskJoinReq message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskJoinReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskJoinReq} DeskJoinReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskJoinReq.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskJoinReq();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.deskNo = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskJoinReq message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskJoinReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskJoinReq} DeskJoinReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskJoinReq.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskJoinReq message.
         * @function verify
         * @memberof pb.DeskJoinReq
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskJoinReq.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.deskNo != null && message.hasOwnProperty("deskNo"))
                if (!$util.isString(message.deskNo))
                    return "deskNo: string expected";
            return null;
        };

        /**
         * Creates a DeskJoinReq message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskJoinReq
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskJoinReq} DeskJoinReq
         */
        DeskJoinReq.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskJoinReq)
                return object;
            var message = new $root.pb.DeskJoinReq();
            if (object.deskNo != null)
                message.deskNo = String(object.deskNo);
            return message;
        };

        /**
         * Creates a plain object from a DeskJoinReq message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskJoinReq
         * @static
         * @param {pb.DeskJoinReq} message DeskJoinReq
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskJoinReq.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.deskNo = "";
            if (message.deskNo != null && message.hasOwnProperty("deskNo"))
                object.deskNo = message.deskNo;
            return object;
        };

        /**
         * Converts this DeskJoinReq to JSON.
         * @function toJSON
         * @memberof pb.DeskJoinReq
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskJoinReq.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskJoinReq
         * @function getTypeUrl
         * @memberof pb.DeskJoinReq
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskJoinReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskJoinReq";
        };

        return DeskJoinReq;
    })();

    pb.DeskJoinResp = (function() {

        /**
         * Properties of a DeskJoinResp.
         * @memberof pb
         * @interface IDeskJoinResp
         * @property {number|null} [code] DeskJoinResp code
         * @property {pb.IDeskJoinInfo|null} [data] DeskJoinResp data
         */

        /**
         * Constructs a new DeskJoinResp.
         * @memberof pb
         * @classdesc Represents a DeskJoinResp.
         * @implements IDeskJoinResp
         * @constructor
         * @param {pb.IDeskJoinResp=} [properties] Properties to set
         */
        function DeskJoinResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskJoinResp code.
         * @member {number} code
         * @memberof pb.DeskJoinResp
         * @instance
         */
        DeskJoinResp.prototype.code = 0;

        /**
         * DeskJoinResp data.
         * @member {pb.IDeskJoinInfo|null|undefined} data
         * @memberof pb.DeskJoinResp
         * @instance
         */
        DeskJoinResp.prototype.data = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * DeskJoinResp _data.
         * @member {"data"|undefined} _data
         * @memberof pb.DeskJoinResp
         * @instance
         */
        Object.defineProperty(DeskJoinResp.prototype, "_data", {
            get: $util.oneOfGetter($oneOfFields = ["data"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new DeskJoinResp instance using the specified properties.
         * @function create
         * @memberof pb.DeskJoinResp
         * @static
         * @param {pb.IDeskJoinResp=} [properties] Properties to set
         * @returns {pb.DeskJoinResp} DeskJoinResp instance
         */
        DeskJoinResp.create = function create(properties) {
            return new DeskJoinResp(properties);
        };

        /**
         * Encodes the specified DeskJoinResp message. Does not implicitly {@link pb.DeskJoinResp.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskJoinResp
         * @static
         * @param {pb.IDeskJoinResp} message DeskJoinResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskJoinResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.code != null && Object.hasOwnProperty.call(message, "code"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.code);
            if (message.data != null && Object.hasOwnProperty.call(message, "data"))
                $root.pb.DeskJoinInfo.encode(message.data, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DeskJoinResp message, length delimited. Does not implicitly {@link pb.DeskJoinResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskJoinResp
         * @static
         * @param {pb.IDeskJoinResp} message DeskJoinResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskJoinResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskJoinResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskJoinResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskJoinResp} DeskJoinResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskJoinResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskJoinResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.code = reader.int32();
                        break;
                    }
                case 2: {
                        message.data = $root.pb.DeskJoinInfo.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskJoinResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskJoinResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskJoinResp} DeskJoinResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskJoinResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskJoinResp message.
         * @function verify
         * @memberof pb.DeskJoinResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskJoinResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.code != null && message.hasOwnProperty("code"))
                if (!$util.isInteger(message.code))
                    return "code: integer expected";
            if (message.data != null && message.hasOwnProperty("data")) {
                properties._data = 1;
                {
                    var error = $root.pb.DeskJoinInfo.verify(message.data);
                    if (error)
                        return "data." + error;
                }
            }
            return null;
        };

        /**
         * Creates a DeskJoinResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskJoinResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskJoinResp} DeskJoinResp
         */
        DeskJoinResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskJoinResp)
                return object;
            var message = new $root.pb.DeskJoinResp();
            if (object.code != null)
                message.code = object.code | 0;
            if (object.data != null) {
                if (typeof object.data !== "object")
                    throw TypeError(".pb.DeskJoinResp.data: object expected");
                message.data = $root.pb.DeskJoinInfo.fromObject(object.data);
            }
            return message;
        };

        /**
         * Creates a plain object from a DeskJoinResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskJoinResp
         * @static
         * @param {pb.DeskJoinResp} message DeskJoinResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskJoinResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.code = 0;
            if (message.code != null && message.hasOwnProperty("code"))
                object.code = message.code;
            if (message.data != null && message.hasOwnProperty("data")) {
                object.data = $root.pb.DeskJoinInfo.toObject(message.data, options);
                if (options.oneofs)
                    object._data = "data";
            }
            return object;
        };

        /**
         * Converts this DeskJoinResp to JSON.
         * @function toJSON
         * @memberof pb.DeskJoinResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskJoinResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskJoinResp
         * @function getTypeUrl
         * @memberof pb.DeskJoinResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskJoinResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskJoinResp";
        };

        return DeskJoinResp;
    })();

    pb.DeskJoinInfo = (function() {

        /**
         * Properties of a DeskJoinInfo.
         * @memberof pb
         * @interface IDeskJoinInfo
         * @property {string|null} [gameType] DeskJoinInfo gameType
         * @property {Array.<pb.IPlayerInfo>|null} [playerList] DeskJoinInfo playerList
         * @property {pb.IDeskInfo|null} [deskInfo] DeskJoinInfo deskInfo
         * @property {pb.ICategoryItem|null} [categoryConf] DeskJoinInfo categoryConf
         */

        /**
         * Constructs a new DeskJoinInfo.
         * @memberof pb
         * @classdesc Represents a DeskJoinInfo.
         * @implements IDeskJoinInfo
         * @constructor
         * @param {pb.IDeskJoinInfo=} [properties] Properties to set
         */
        function DeskJoinInfo(properties) {
            this.playerList = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskJoinInfo gameType.
         * @member {string} gameType
         * @memberof pb.DeskJoinInfo
         * @instance
         */
        DeskJoinInfo.prototype.gameType = "";

        /**
         * DeskJoinInfo playerList.
         * @member {Array.<pb.IPlayerInfo>} playerList
         * @memberof pb.DeskJoinInfo
         * @instance
         */
        DeskJoinInfo.prototype.playerList = $util.emptyArray;

        /**
         * DeskJoinInfo deskInfo.
         * @member {pb.IDeskInfo|null|undefined} deskInfo
         * @memberof pb.DeskJoinInfo
         * @instance
         */
        DeskJoinInfo.prototype.deskInfo = null;

        /**
         * DeskJoinInfo categoryConf.
         * @member {pb.ICategoryItem|null|undefined} categoryConf
         * @memberof pb.DeskJoinInfo
         * @instance
         */
        DeskJoinInfo.prototype.categoryConf = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * DeskJoinInfo _categoryConf.
         * @member {"categoryConf"|undefined} _categoryConf
         * @memberof pb.DeskJoinInfo
         * @instance
         */
        Object.defineProperty(DeskJoinInfo.prototype, "_categoryConf", {
            get: $util.oneOfGetter($oneOfFields = ["categoryConf"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new DeskJoinInfo instance using the specified properties.
         * @function create
         * @memberof pb.DeskJoinInfo
         * @static
         * @param {pb.IDeskJoinInfo=} [properties] Properties to set
         * @returns {pb.DeskJoinInfo} DeskJoinInfo instance
         */
        DeskJoinInfo.create = function create(properties) {
            return new DeskJoinInfo(properties);
        };

        /**
         * Encodes the specified DeskJoinInfo message. Does not implicitly {@link pb.DeskJoinInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskJoinInfo
         * @static
         * @param {pb.IDeskJoinInfo} message DeskJoinInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskJoinInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.gameType != null && Object.hasOwnProperty.call(message, "gameType"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.gameType);
            if (message.playerList != null && message.playerList.length)
                for (var i = 0; i < message.playerList.length; ++i)
                    $root.pb.PlayerInfo.encode(message.playerList[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            if (message.deskInfo != null && Object.hasOwnProperty.call(message, "deskInfo"))
                $root.pb.DeskInfo.encode(message.deskInfo, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
            if (message.categoryConf != null && Object.hasOwnProperty.call(message, "categoryConf"))
                $root.pb.CategoryItem.encode(message.categoryConf, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DeskJoinInfo message, length delimited. Does not implicitly {@link pb.DeskJoinInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskJoinInfo
         * @static
         * @param {pb.IDeskJoinInfo} message DeskJoinInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskJoinInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskJoinInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskJoinInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskJoinInfo} DeskJoinInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskJoinInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskJoinInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.gameType = reader.string();
                        break;
                    }
                case 2: {
                        if (!(message.playerList && message.playerList.length))
                            message.playerList = [];
                        message.playerList.push($root.pb.PlayerInfo.decode(reader, reader.uint32()));
                        break;
                    }
                case 3: {
                        message.deskInfo = $root.pb.DeskInfo.decode(reader, reader.uint32());
                        break;
                    }
                case 4: {
                        message.categoryConf = $root.pb.CategoryItem.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskJoinInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskJoinInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskJoinInfo} DeskJoinInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskJoinInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskJoinInfo message.
         * @function verify
         * @memberof pb.DeskJoinInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskJoinInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.gameType != null && message.hasOwnProperty("gameType"))
                if (!$util.isString(message.gameType))
                    return "gameType: string expected";
            if (message.playerList != null && message.hasOwnProperty("playerList")) {
                if (!Array.isArray(message.playerList))
                    return "playerList: array expected";
                for (var i = 0; i < message.playerList.length; ++i) {
                    var error = $root.pb.PlayerInfo.verify(message.playerList[i]);
                    if (error)
                        return "playerList." + error;
                }
            }
            if (message.deskInfo != null && message.hasOwnProperty("deskInfo")) {
                var error = $root.pb.DeskInfo.verify(message.deskInfo);
                if (error)
                    return "deskInfo." + error;
            }
            if (message.categoryConf != null && message.hasOwnProperty("categoryConf")) {
                properties._categoryConf = 1;
                {
                    var error = $root.pb.CategoryItem.verify(message.categoryConf);
                    if (error)
                        return "categoryConf." + error;
                }
            }
            return null;
        };

        /**
         * Creates a DeskJoinInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskJoinInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskJoinInfo} DeskJoinInfo
         */
        DeskJoinInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskJoinInfo)
                return object;
            var message = new $root.pb.DeskJoinInfo();
            if (object.gameType != null)
                message.gameType = String(object.gameType);
            if (object.playerList) {
                if (!Array.isArray(object.playerList))
                    throw TypeError(".pb.DeskJoinInfo.playerList: array expected");
                message.playerList = [];
                for (var i = 0; i < object.playerList.length; ++i) {
                    if (typeof object.playerList[i] !== "object")
                        throw TypeError(".pb.DeskJoinInfo.playerList: object expected");
                    message.playerList[i] = $root.pb.PlayerInfo.fromObject(object.playerList[i]);
                }
            }
            if (object.deskInfo != null) {
                if (typeof object.deskInfo !== "object")
                    throw TypeError(".pb.DeskJoinInfo.deskInfo: object expected");
                message.deskInfo = $root.pb.DeskInfo.fromObject(object.deskInfo);
            }
            if (object.categoryConf != null) {
                if (typeof object.categoryConf !== "object")
                    throw TypeError(".pb.DeskJoinInfo.categoryConf: object expected");
                message.categoryConf = $root.pb.CategoryItem.fromObject(object.categoryConf);
            }
            return message;
        };

        /**
         * Creates a plain object from a DeskJoinInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskJoinInfo
         * @static
         * @param {pb.DeskJoinInfo} message DeskJoinInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskJoinInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.playerList = [];
            if (options.defaults) {
                object.gameType = "";
                object.deskInfo = null;
            }
            if (message.gameType != null && message.hasOwnProperty("gameType"))
                object.gameType = message.gameType;
            if (message.playerList && message.playerList.length) {
                object.playerList = [];
                for (var j = 0; j < message.playerList.length; ++j)
                    object.playerList[j] = $root.pb.PlayerInfo.toObject(message.playerList[j], options);
            }
            if (message.deskInfo != null && message.hasOwnProperty("deskInfo"))
                object.deskInfo = $root.pb.DeskInfo.toObject(message.deskInfo, options);
            if (message.categoryConf != null && message.hasOwnProperty("categoryConf")) {
                object.categoryConf = $root.pb.CategoryItem.toObject(message.categoryConf, options);
                if (options.oneofs)
                    object._categoryConf = "categoryConf";
            }
            return object;
        };

        /**
         * Converts this DeskJoinInfo to JSON.
         * @function toJSON
         * @memberof pb.DeskJoinInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskJoinInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskJoinInfo
         * @function getTypeUrl
         * @memberof pb.DeskJoinInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskJoinInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskJoinInfo";
        };

        return DeskJoinInfo;
    })();

    pb.DeskQueryIncompleteDeskReq = (function() {

        /**
         * Properties of a DeskQueryIncompleteDeskReq.
         * @memberof pb
         * @interface IDeskQueryIncompleteDeskReq
         */

        /**
         * Constructs a new DeskQueryIncompleteDeskReq.
         * @memberof pb
         * @classdesc Represents a DeskQueryIncompleteDeskReq.
         * @implements IDeskQueryIncompleteDeskReq
         * @constructor
         * @param {pb.IDeskQueryIncompleteDeskReq=} [properties] Properties to set
         */
        function DeskQueryIncompleteDeskReq(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * Creates a new DeskQueryIncompleteDeskReq instance using the specified properties.
         * @function create
         * @memberof pb.DeskQueryIncompleteDeskReq
         * @static
         * @param {pb.IDeskQueryIncompleteDeskReq=} [properties] Properties to set
         * @returns {pb.DeskQueryIncompleteDeskReq} DeskQueryIncompleteDeskReq instance
         */
        DeskQueryIncompleteDeskReq.create = function create(properties) {
            return new DeskQueryIncompleteDeskReq(properties);
        };

        /**
         * Encodes the specified DeskQueryIncompleteDeskReq message. Does not implicitly {@link pb.DeskQueryIncompleteDeskReq.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskQueryIncompleteDeskReq
         * @static
         * @param {pb.IDeskQueryIncompleteDeskReq} message DeskQueryIncompleteDeskReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskQueryIncompleteDeskReq.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };

        /**
         * Encodes the specified DeskQueryIncompleteDeskReq message, length delimited. Does not implicitly {@link pb.DeskQueryIncompleteDeskReq.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskQueryIncompleteDeskReq
         * @static
         * @param {pb.IDeskQueryIncompleteDeskReq} message DeskQueryIncompleteDeskReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskQueryIncompleteDeskReq.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskQueryIncompleteDeskReq message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskQueryIncompleteDeskReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskQueryIncompleteDeskReq} DeskQueryIncompleteDeskReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskQueryIncompleteDeskReq.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskQueryIncompleteDeskReq();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskQueryIncompleteDeskReq message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskQueryIncompleteDeskReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskQueryIncompleteDeskReq} DeskQueryIncompleteDeskReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskQueryIncompleteDeskReq.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskQueryIncompleteDeskReq message.
         * @function verify
         * @memberof pb.DeskQueryIncompleteDeskReq
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskQueryIncompleteDeskReq.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };

        /**
         * Creates a DeskQueryIncompleteDeskReq message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskQueryIncompleteDeskReq
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskQueryIncompleteDeskReq} DeskQueryIncompleteDeskReq
         */
        DeskQueryIncompleteDeskReq.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskQueryIncompleteDeskReq)
                return object;
            return new $root.pb.DeskQueryIncompleteDeskReq();
        };

        /**
         * Creates a plain object from a DeskQueryIncompleteDeskReq message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskQueryIncompleteDeskReq
         * @static
         * @param {pb.DeskQueryIncompleteDeskReq} message DeskQueryIncompleteDeskReq
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskQueryIncompleteDeskReq.toObject = function toObject() {
            return {};
        };

        /**
         * Converts this DeskQueryIncompleteDeskReq to JSON.
         * @function toJSON
         * @memberof pb.DeskQueryIncompleteDeskReq
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskQueryIncompleteDeskReq.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskQueryIncompleteDeskReq
         * @function getTypeUrl
         * @memberof pb.DeskQueryIncompleteDeskReq
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskQueryIncompleteDeskReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskQueryIncompleteDeskReq";
        };

        return DeskQueryIncompleteDeskReq;
    })();

    pb.DeskQueryIncompleteDeskResp = (function() {

        /**
         * Properties of a DeskQueryIncompleteDeskResp.
         * @memberof pb
         * @interface IDeskQueryIncompleteDeskResp
         * @property {number|null} [code] DeskQueryIncompleteDeskResp code
         * @property {pb.IDeskQueryIncompleteDeskInfo|null} [data] DeskQueryIncompleteDeskResp data
         */

        /**
         * Constructs a new DeskQueryIncompleteDeskResp.
         * @memberof pb
         * @classdesc Represents a DeskQueryIncompleteDeskResp.
         * @implements IDeskQueryIncompleteDeskResp
         * @constructor
         * @param {pb.IDeskQueryIncompleteDeskResp=} [properties] Properties to set
         */
        function DeskQueryIncompleteDeskResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskQueryIncompleteDeskResp code.
         * @member {number} code
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @instance
         */
        DeskQueryIncompleteDeskResp.prototype.code = 0;

        /**
         * DeskQueryIncompleteDeskResp data.
         * @member {pb.IDeskQueryIncompleteDeskInfo|null|undefined} data
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @instance
         */
        DeskQueryIncompleteDeskResp.prototype.data = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * DeskQueryIncompleteDeskResp _data.
         * @member {"data"|undefined} _data
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @instance
         */
        Object.defineProperty(DeskQueryIncompleteDeskResp.prototype, "_data", {
            get: $util.oneOfGetter($oneOfFields = ["data"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new DeskQueryIncompleteDeskResp instance using the specified properties.
         * @function create
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @static
         * @param {pb.IDeskQueryIncompleteDeskResp=} [properties] Properties to set
         * @returns {pb.DeskQueryIncompleteDeskResp} DeskQueryIncompleteDeskResp instance
         */
        DeskQueryIncompleteDeskResp.create = function create(properties) {
            return new DeskQueryIncompleteDeskResp(properties);
        };

        /**
         * Encodes the specified DeskQueryIncompleteDeskResp message. Does not implicitly {@link pb.DeskQueryIncompleteDeskResp.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @static
         * @param {pb.IDeskQueryIncompleteDeskResp} message DeskQueryIncompleteDeskResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskQueryIncompleteDeskResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.code != null && Object.hasOwnProperty.call(message, "code"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.code);
            if (message.data != null && Object.hasOwnProperty.call(message, "data"))
                $root.pb.DeskQueryIncompleteDeskInfo.encode(message.data, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DeskQueryIncompleteDeskResp message, length delimited. Does not implicitly {@link pb.DeskQueryIncompleteDeskResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @static
         * @param {pb.IDeskQueryIncompleteDeskResp} message DeskQueryIncompleteDeskResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskQueryIncompleteDeskResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskQueryIncompleteDeskResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskQueryIncompleteDeskResp} DeskQueryIncompleteDeskResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskQueryIncompleteDeskResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskQueryIncompleteDeskResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.code = reader.int32();
                        break;
                    }
                case 2: {
                        message.data = $root.pb.DeskQueryIncompleteDeskInfo.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskQueryIncompleteDeskResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskQueryIncompleteDeskResp} DeskQueryIncompleteDeskResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskQueryIncompleteDeskResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskQueryIncompleteDeskResp message.
         * @function verify
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskQueryIncompleteDeskResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.code != null && message.hasOwnProperty("code"))
                if (!$util.isInteger(message.code))
                    return "code: integer expected";
            if (message.data != null && message.hasOwnProperty("data")) {
                properties._data = 1;
                {
                    var error = $root.pb.DeskQueryIncompleteDeskInfo.verify(message.data);
                    if (error)
                        return "data." + error;
                }
            }
            return null;
        };

        /**
         * Creates a DeskQueryIncompleteDeskResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskQueryIncompleteDeskResp} DeskQueryIncompleteDeskResp
         */
        DeskQueryIncompleteDeskResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskQueryIncompleteDeskResp)
                return object;
            var message = new $root.pb.DeskQueryIncompleteDeskResp();
            if (object.code != null)
                message.code = object.code | 0;
            if (object.data != null) {
                if (typeof object.data !== "object")
                    throw TypeError(".pb.DeskQueryIncompleteDeskResp.data: object expected");
                message.data = $root.pb.DeskQueryIncompleteDeskInfo.fromObject(object.data);
            }
            return message;
        };

        /**
         * Creates a plain object from a DeskQueryIncompleteDeskResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @static
         * @param {pb.DeskQueryIncompleteDeskResp} message DeskQueryIncompleteDeskResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskQueryIncompleteDeskResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.code = 0;
            if (message.code != null && message.hasOwnProperty("code"))
                object.code = message.code;
            if (message.data != null && message.hasOwnProperty("data")) {
                object.data = $root.pb.DeskQueryIncompleteDeskInfo.toObject(message.data, options);
                if (options.oneofs)
                    object._data = "data";
            }
            return object;
        };

        /**
         * Converts this DeskQueryIncompleteDeskResp to JSON.
         * @function toJSON
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskQueryIncompleteDeskResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskQueryIncompleteDeskResp
         * @function getTypeUrl
         * @memberof pb.DeskQueryIncompleteDeskResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskQueryIncompleteDeskResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskQueryIncompleteDeskResp";
        };

        return DeskQueryIncompleteDeskResp;
    })();

    pb.DeskQueryIncompleteDeskInfo = (function() {

        /**
         * Properties of a DeskQueryIncompleteDeskInfo.
         * @memberof pb
         * @interface IDeskQueryIncompleteDeskInfo
         * @property {string|null} [gameType] DeskQueryIncompleteDeskInfo gameType
         * @property {Array.<pb.IPlayerInfo>|null} [playerList] DeskQueryIncompleteDeskInfo playerList
         * @property {pb.IDeskInfo|null} [deskInfo] DeskQueryIncompleteDeskInfo deskInfo
         * @property {Array.<pb.IDuanPaiInfo>|null} [duanPai] DeskQueryIncompleteDeskInfo duanPai
         * @property {pb.IDeskRoundInfo|null} [roundInfo] DeskQueryIncompleteDeskInfo roundInfo
         * @property {pb.ICategoryItem|null} [categoryConf] DeskQueryIncompleteDeskInfo categoryConf
         */

        /**
         * Constructs a new DeskQueryIncompleteDeskInfo.
         * @memberof pb
         * @classdesc Represents a DeskQueryIncompleteDeskInfo.
         * @implements IDeskQueryIncompleteDeskInfo
         * @constructor
         * @param {pb.IDeskQueryIncompleteDeskInfo=} [properties] Properties to set
         */
        function DeskQueryIncompleteDeskInfo(properties) {
            this.playerList = [];
            this.duanPai = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskQueryIncompleteDeskInfo gameType.
         * @member {string} gameType
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @instance
         */
        DeskQueryIncompleteDeskInfo.prototype.gameType = "";

        /**
         * DeskQueryIncompleteDeskInfo playerList.
         * @member {Array.<pb.IPlayerInfo>} playerList
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @instance
         */
        DeskQueryIncompleteDeskInfo.prototype.playerList = $util.emptyArray;

        /**
         * DeskQueryIncompleteDeskInfo deskInfo.
         * @member {pb.IDeskInfo|null|undefined} deskInfo
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @instance
         */
        DeskQueryIncompleteDeskInfo.prototype.deskInfo = null;

        /**
         * DeskQueryIncompleteDeskInfo duanPai.
         * @member {Array.<pb.IDuanPaiInfo>} duanPai
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @instance
         */
        DeskQueryIncompleteDeskInfo.prototype.duanPai = $util.emptyArray;

        /**
         * DeskQueryIncompleteDeskInfo roundInfo.
         * @member {pb.IDeskRoundInfo|null|undefined} roundInfo
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @instance
         */
        DeskQueryIncompleteDeskInfo.prototype.roundInfo = null;

        /**
         * DeskQueryIncompleteDeskInfo categoryConf.
         * @member {pb.ICategoryItem|null|undefined} categoryConf
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @instance
         */
        DeskQueryIncompleteDeskInfo.prototype.categoryConf = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * DeskQueryIncompleteDeskInfo _categoryConf.
         * @member {"categoryConf"|undefined} _categoryConf
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @instance
         */
        Object.defineProperty(DeskQueryIncompleteDeskInfo.prototype, "_categoryConf", {
            get: $util.oneOfGetter($oneOfFields = ["categoryConf"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new DeskQueryIncompleteDeskInfo instance using the specified properties.
         * @function create
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @static
         * @param {pb.IDeskQueryIncompleteDeskInfo=} [properties] Properties to set
         * @returns {pb.DeskQueryIncompleteDeskInfo} DeskQueryIncompleteDeskInfo instance
         */
        DeskQueryIncompleteDeskInfo.create = function create(properties) {
            return new DeskQueryIncompleteDeskInfo(properties);
        };

        /**
         * Encodes the specified DeskQueryIncompleteDeskInfo message. Does not implicitly {@link pb.DeskQueryIncompleteDeskInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @static
         * @param {pb.IDeskQueryIncompleteDeskInfo} message DeskQueryIncompleteDeskInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskQueryIncompleteDeskInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.gameType != null && Object.hasOwnProperty.call(message, "gameType"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.gameType);
            if (message.playerList != null && message.playerList.length)
                for (var i = 0; i < message.playerList.length; ++i)
                    $root.pb.PlayerInfo.encode(message.playerList[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            if (message.deskInfo != null && Object.hasOwnProperty.call(message, "deskInfo"))
                $root.pb.DeskInfo.encode(message.deskInfo, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
            if (message.duanPai != null && message.duanPai.length)
                for (var i = 0; i < message.duanPai.length; ++i)
                    $root.pb.DuanPaiInfo.encode(message.duanPai[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
            if (message.roundInfo != null && Object.hasOwnProperty.call(message, "roundInfo"))
                $root.pb.DeskRoundInfo.encode(message.roundInfo, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
            if (message.categoryConf != null && Object.hasOwnProperty.call(message, "categoryConf"))
                $root.pb.CategoryItem.encode(message.categoryConf, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DeskQueryIncompleteDeskInfo message, length delimited. Does not implicitly {@link pb.DeskQueryIncompleteDeskInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @static
         * @param {pb.IDeskQueryIncompleteDeskInfo} message DeskQueryIncompleteDeskInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskQueryIncompleteDeskInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskQueryIncompleteDeskInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskQueryIncompleteDeskInfo} DeskQueryIncompleteDeskInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskQueryIncompleteDeskInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskQueryIncompleteDeskInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.gameType = reader.string();
                        break;
                    }
                case 2: {
                        if (!(message.playerList && message.playerList.length))
                            message.playerList = [];
                        message.playerList.push($root.pb.PlayerInfo.decode(reader, reader.uint32()));
                        break;
                    }
                case 3: {
                        message.deskInfo = $root.pb.DeskInfo.decode(reader, reader.uint32());
                        break;
                    }
                case 4: {
                        if (!(message.duanPai && message.duanPai.length))
                            message.duanPai = [];
                        message.duanPai.push($root.pb.DuanPaiInfo.decode(reader, reader.uint32()));
                        break;
                    }
                case 5: {
                        message.roundInfo = $root.pb.DeskRoundInfo.decode(reader, reader.uint32());
                        break;
                    }
                case 6: {
                        message.categoryConf = $root.pb.CategoryItem.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskQueryIncompleteDeskInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskQueryIncompleteDeskInfo} DeskQueryIncompleteDeskInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskQueryIncompleteDeskInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskQueryIncompleteDeskInfo message.
         * @function verify
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskQueryIncompleteDeskInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.gameType != null && message.hasOwnProperty("gameType"))
                if (!$util.isString(message.gameType))
                    return "gameType: string expected";
            if (message.playerList != null && message.hasOwnProperty("playerList")) {
                if (!Array.isArray(message.playerList))
                    return "playerList: array expected";
                for (var i = 0; i < message.playerList.length; ++i) {
                    var error = $root.pb.PlayerInfo.verify(message.playerList[i]);
                    if (error)
                        return "playerList." + error;
                }
            }
            if (message.deskInfo != null && message.hasOwnProperty("deskInfo")) {
                var error = $root.pb.DeskInfo.verify(message.deskInfo);
                if (error)
                    return "deskInfo." + error;
            }
            if (message.duanPai != null && message.hasOwnProperty("duanPai")) {
                if (!Array.isArray(message.duanPai))
                    return "duanPai: array expected";
                for (var i = 0; i < message.duanPai.length; ++i) {
                    var error = $root.pb.DuanPaiInfo.verify(message.duanPai[i]);
                    if (error)
                        return "duanPai." + error;
                }
            }
            if (message.roundInfo != null && message.hasOwnProperty("roundInfo")) {
                var error = $root.pb.DeskRoundInfo.verify(message.roundInfo);
                if (error)
                    return "roundInfo." + error;
            }
            if (message.categoryConf != null && message.hasOwnProperty("categoryConf")) {
                properties._categoryConf = 1;
                {
                    var error = $root.pb.CategoryItem.verify(message.categoryConf);
                    if (error)
                        return "categoryConf." + error;
                }
            }
            return null;
        };

        /**
         * Creates a DeskQueryIncompleteDeskInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskQueryIncompleteDeskInfo} DeskQueryIncompleteDeskInfo
         */
        DeskQueryIncompleteDeskInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskQueryIncompleteDeskInfo)
                return object;
            var message = new $root.pb.DeskQueryIncompleteDeskInfo();
            if (object.gameType != null)
                message.gameType = String(object.gameType);
            if (object.playerList) {
                if (!Array.isArray(object.playerList))
                    throw TypeError(".pb.DeskQueryIncompleteDeskInfo.playerList: array expected");
                message.playerList = [];
                for (var i = 0; i < object.playerList.length; ++i) {
                    if (typeof object.playerList[i] !== "object")
                        throw TypeError(".pb.DeskQueryIncompleteDeskInfo.playerList: object expected");
                    message.playerList[i] = $root.pb.PlayerInfo.fromObject(object.playerList[i]);
                }
            }
            if (object.deskInfo != null) {
                if (typeof object.deskInfo !== "object")
                    throw TypeError(".pb.DeskQueryIncompleteDeskInfo.deskInfo: object expected");
                message.deskInfo = $root.pb.DeskInfo.fromObject(object.deskInfo);
            }
            if (object.duanPai) {
                if (!Array.isArray(object.duanPai))
                    throw TypeError(".pb.DeskQueryIncompleteDeskInfo.duanPai: array expected");
                message.duanPai = [];
                for (var i = 0; i < object.duanPai.length; ++i) {
                    if (typeof object.duanPai[i] !== "object")
                        throw TypeError(".pb.DeskQueryIncompleteDeskInfo.duanPai: object expected");
                    message.duanPai[i] = $root.pb.DuanPaiInfo.fromObject(object.duanPai[i]);
                }
            }
            if (object.roundInfo != null) {
                if (typeof object.roundInfo !== "object")
                    throw TypeError(".pb.DeskQueryIncompleteDeskInfo.roundInfo: object expected");
                message.roundInfo = $root.pb.DeskRoundInfo.fromObject(object.roundInfo);
            }
            if (object.categoryConf != null) {
                if (typeof object.categoryConf !== "object")
                    throw TypeError(".pb.DeskQueryIncompleteDeskInfo.categoryConf: object expected");
                message.categoryConf = $root.pb.CategoryItem.fromObject(object.categoryConf);
            }
            return message;
        };

        /**
         * Creates a plain object from a DeskQueryIncompleteDeskInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @static
         * @param {pb.DeskQueryIncompleteDeskInfo} message DeskQueryIncompleteDeskInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskQueryIncompleteDeskInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults) {
                object.playerList = [];
                object.duanPai = [];
            }
            if (options.defaults) {
                object.gameType = "";
                object.deskInfo = null;
                object.roundInfo = null;
            }
            if (message.gameType != null && message.hasOwnProperty("gameType"))
                object.gameType = message.gameType;
            if (message.playerList && message.playerList.length) {
                object.playerList = [];
                for (var j = 0; j < message.playerList.length; ++j)
                    object.playerList[j] = $root.pb.PlayerInfo.toObject(message.playerList[j], options);
            }
            if (message.deskInfo != null && message.hasOwnProperty("deskInfo"))
                object.deskInfo = $root.pb.DeskInfo.toObject(message.deskInfo, options);
            if (message.duanPai && message.duanPai.length) {
                object.duanPai = [];
                for (var j = 0; j < message.duanPai.length; ++j)
                    object.duanPai[j] = $root.pb.DuanPaiInfo.toObject(message.duanPai[j], options);
            }
            if (message.roundInfo != null && message.hasOwnProperty("roundInfo"))
                object.roundInfo = $root.pb.DeskRoundInfo.toObject(message.roundInfo, options);
            if (message.categoryConf != null && message.hasOwnProperty("categoryConf")) {
                object.categoryConf = $root.pb.CategoryItem.toObject(message.categoryConf, options);
                if (options.oneofs)
                    object._categoryConf = "categoryConf";
            }
            return object;
        };

        /**
         * Converts this DeskQueryIncompleteDeskInfo to JSON.
         * @function toJSON
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskQueryIncompleteDeskInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskQueryIncompleteDeskInfo
         * @function getTypeUrl
         * @memberof pb.DeskQueryIncompleteDeskInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskQueryIncompleteDeskInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskQueryIncompleteDeskInfo";
        };

        return DeskQueryIncompleteDeskInfo;
    })();

    pb.DeskReadyPushResp = (function() {

        /**
         * Properties of a DeskReadyPushResp.
         * @memberof pb
         * @interface IDeskReadyPushResp
         * @property {number|Long|null} [playerShortId] DeskReadyPushResp playerShortId
         * @property {boolean|null} [isReady] DeskReadyPushResp isReady
         */

        /**
         * Constructs a new DeskReadyPushResp.
         * @memberof pb
         * @classdesc Represents a DeskReadyPushResp.
         * @implements IDeskReadyPushResp
         * @constructor
         * @param {pb.IDeskReadyPushResp=} [properties] Properties to set
         */
        function DeskReadyPushResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskReadyPushResp playerShortId.
         * @member {number|Long} playerShortId
         * @memberof pb.DeskReadyPushResp
         * @instance
         */
        DeskReadyPushResp.prototype.playerShortId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * DeskReadyPushResp isReady.
         * @member {boolean} isReady
         * @memberof pb.DeskReadyPushResp
         * @instance
         */
        DeskReadyPushResp.prototype.isReady = false;

        /**
         * Creates a new DeskReadyPushResp instance using the specified properties.
         * @function create
         * @memberof pb.DeskReadyPushResp
         * @static
         * @param {pb.IDeskReadyPushResp=} [properties] Properties to set
         * @returns {pb.DeskReadyPushResp} DeskReadyPushResp instance
         */
        DeskReadyPushResp.create = function create(properties) {
            return new DeskReadyPushResp(properties);
        };

        /**
         * Encodes the specified DeskReadyPushResp message. Does not implicitly {@link pb.DeskReadyPushResp.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskReadyPushResp
         * @static
         * @param {pb.IDeskReadyPushResp} message DeskReadyPushResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskReadyPushResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.playerShortId != null && Object.hasOwnProperty.call(message, "playerShortId"))
                writer.uint32(/* id 1, wireType 0 =*/8).int64(message.playerShortId);
            if (message.isReady != null && Object.hasOwnProperty.call(message, "isReady"))
                writer.uint32(/* id 2, wireType 0 =*/16).bool(message.isReady);
            return writer;
        };

        /**
         * Encodes the specified DeskReadyPushResp message, length delimited. Does not implicitly {@link pb.DeskReadyPushResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskReadyPushResp
         * @static
         * @param {pb.IDeskReadyPushResp} message DeskReadyPushResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskReadyPushResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskReadyPushResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskReadyPushResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskReadyPushResp} DeskReadyPushResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskReadyPushResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskReadyPushResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.playerShortId = reader.int64();
                        break;
                    }
                case 2: {
                        message.isReady = reader.bool();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskReadyPushResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskReadyPushResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskReadyPushResp} DeskReadyPushResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskReadyPushResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskReadyPushResp message.
         * @function verify
         * @memberof pb.DeskReadyPushResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskReadyPushResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.playerShortId != null && message.hasOwnProperty("playerShortId"))
                if (!$util.isInteger(message.playerShortId) && !(message.playerShortId && $util.isInteger(message.playerShortId.low) && $util.isInteger(message.playerShortId.high)))
                    return "playerShortId: integer|Long expected";
            if (message.isReady != null && message.hasOwnProperty("isReady"))
                if (typeof message.isReady !== "boolean")
                    return "isReady: boolean expected";
            return null;
        };

        /**
         * Creates a DeskReadyPushResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskReadyPushResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskReadyPushResp} DeskReadyPushResp
         */
        DeskReadyPushResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskReadyPushResp)
                return object;
            var message = new $root.pb.DeskReadyPushResp();
            if (object.playerShortId != null)
                if ($util.Long)
                    (message.playerShortId = $util.Long.fromValue(object.playerShortId)).unsigned = false;
                else if (typeof object.playerShortId === "string")
                    message.playerShortId = parseInt(object.playerShortId, 10);
                else if (typeof object.playerShortId === "number")
                    message.playerShortId = object.playerShortId;
                else if (typeof object.playerShortId === "object")
                    message.playerShortId = new $util.LongBits(object.playerShortId.low >>> 0, object.playerShortId.high >>> 0).toNumber();
            if (object.isReady != null)
                message.isReady = Boolean(object.isReady);
            return message;
        };

        /**
         * Creates a plain object from a DeskReadyPushResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskReadyPushResp
         * @static
         * @param {pb.DeskReadyPushResp} message DeskReadyPushResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskReadyPushResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.playerShortId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.playerShortId = options.longs === String ? "0" : 0;
                object.isReady = false;
            }
            if (message.playerShortId != null && message.hasOwnProperty("playerShortId"))
                if (typeof message.playerShortId === "number")
                    object.playerShortId = options.longs === String ? String(message.playerShortId) : message.playerShortId;
                else
                    object.playerShortId = options.longs === String ? $util.Long.prototype.toString.call(message.playerShortId) : options.longs === Number ? new $util.LongBits(message.playerShortId.low >>> 0, message.playerShortId.high >>> 0).toNumber() : message.playerShortId;
            if (message.isReady != null && message.hasOwnProperty("isReady"))
                object.isReady = message.isReady;
            return object;
        };

        /**
         * Converts this DeskReadyPushResp to JSON.
         * @function toJSON
         * @memberof pb.DeskReadyPushResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskReadyPushResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskReadyPushResp
         * @function getTypeUrl
         * @memberof pb.DeskReadyPushResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskReadyPushResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskReadyPushResp";
        };

        return DeskReadyPushResp;
    })();

    pb.DeskReadyReq = (function() {

        /**
         * Properties of a DeskReadyReq.
         * @memberof pb
         * @interface IDeskReadyReq
         * @property {boolean|null} [isReady] DeskReadyReq isReady
         */

        /**
         * Constructs a new DeskReadyReq.
         * @memberof pb
         * @classdesc Represents a DeskReadyReq.
         * @implements IDeskReadyReq
         * @constructor
         * @param {pb.IDeskReadyReq=} [properties] Properties to set
         */
        function DeskReadyReq(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskReadyReq isReady.
         * @member {boolean} isReady
         * @memberof pb.DeskReadyReq
         * @instance
         */
        DeskReadyReq.prototype.isReady = false;

        /**
         * Creates a new DeskReadyReq instance using the specified properties.
         * @function create
         * @memberof pb.DeskReadyReq
         * @static
         * @param {pb.IDeskReadyReq=} [properties] Properties to set
         * @returns {pb.DeskReadyReq} DeskReadyReq instance
         */
        DeskReadyReq.create = function create(properties) {
            return new DeskReadyReq(properties);
        };

        /**
         * Encodes the specified DeskReadyReq message. Does not implicitly {@link pb.DeskReadyReq.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskReadyReq
         * @static
         * @param {pb.IDeskReadyReq} message DeskReadyReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskReadyReq.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.isReady != null && Object.hasOwnProperty.call(message, "isReady"))
                writer.uint32(/* id 1, wireType 0 =*/8).bool(message.isReady);
            return writer;
        };

        /**
         * Encodes the specified DeskReadyReq message, length delimited. Does not implicitly {@link pb.DeskReadyReq.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskReadyReq
         * @static
         * @param {pb.IDeskReadyReq} message DeskReadyReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskReadyReq.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskReadyReq message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskReadyReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskReadyReq} DeskReadyReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskReadyReq.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskReadyReq();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.isReady = reader.bool();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskReadyReq message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskReadyReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskReadyReq} DeskReadyReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskReadyReq.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskReadyReq message.
         * @function verify
         * @memberof pb.DeskReadyReq
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskReadyReq.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.isReady != null && message.hasOwnProperty("isReady"))
                if (typeof message.isReady !== "boolean")
                    return "isReady: boolean expected";
            return null;
        };

        /**
         * Creates a DeskReadyReq message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskReadyReq
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskReadyReq} DeskReadyReq
         */
        DeskReadyReq.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskReadyReq)
                return object;
            var message = new $root.pb.DeskReadyReq();
            if (object.isReady != null)
                message.isReady = Boolean(object.isReady);
            return message;
        };

        /**
         * Creates a plain object from a DeskReadyReq message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskReadyReq
         * @static
         * @param {pb.DeskReadyReq} message DeskReadyReq
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskReadyReq.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.isReady = false;
            if (message.isReady != null && message.hasOwnProperty("isReady"))
                object.isReady = message.isReady;
            return object;
        };

        /**
         * Converts this DeskReadyReq to JSON.
         * @function toJSON
         * @memberof pb.DeskReadyReq
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskReadyReq.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskReadyReq
         * @function getTypeUrl
         * @memberof pb.DeskReadyReq
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskReadyReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskReadyReq";
        };

        return DeskReadyReq;
    })();

    pb.DeskReadyResp = (function() {

        /**
         * Properties of a DeskReadyResp.
         * @memberof pb
         * @interface IDeskReadyResp
         * @property {number|null} [code] DeskReadyResp code
         */

        /**
         * Constructs a new DeskReadyResp.
         * @memberof pb
         * @classdesc Represents a DeskReadyResp.
         * @implements IDeskReadyResp
         * @constructor
         * @param {pb.IDeskReadyResp=} [properties] Properties to set
         */
        function DeskReadyResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeskReadyResp code.
         * @member {number} code
         * @memberof pb.DeskReadyResp
         * @instance
         */
        DeskReadyResp.prototype.code = 0;

        /**
         * Creates a new DeskReadyResp instance using the specified properties.
         * @function create
         * @memberof pb.DeskReadyResp
         * @static
         * @param {pb.IDeskReadyResp=} [properties] Properties to set
         * @returns {pb.DeskReadyResp} DeskReadyResp instance
         */
        DeskReadyResp.create = function create(properties) {
            return new DeskReadyResp(properties);
        };

        /**
         * Encodes the specified DeskReadyResp message. Does not implicitly {@link pb.DeskReadyResp.verify|verify} messages.
         * @function encode
         * @memberof pb.DeskReadyResp
         * @static
         * @param {pb.IDeskReadyResp} message DeskReadyResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskReadyResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.code != null && Object.hasOwnProperty.call(message, "code"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.code);
            return writer;
        };

        /**
         * Encodes the specified DeskReadyResp message, length delimited. Does not implicitly {@link pb.DeskReadyResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.DeskReadyResp
         * @static
         * @param {pb.IDeskReadyResp} message DeskReadyResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeskReadyResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a DeskReadyResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.DeskReadyResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.DeskReadyResp} DeskReadyResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskReadyResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.DeskReadyResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.code = reader.int32();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeskReadyResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.DeskReadyResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.DeskReadyResp} DeskReadyResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeskReadyResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeskReadyResp message.
         * @function verify
         * @memberof pb.DeskReadyResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeskReadyResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.code != null && message.hasOwnProperty("code"))
                if (!$util.isInteger(message.code))
                    return "code: integer expected";
            return null;
        };

        /**
         * Creates a DeskReadyResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.DeskReadyResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.DeskReadyResp} DeskReadyResp
         */
        DeskReadyResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.DeskReadyResp)
                return object;
            var message = new $root.pb.DeskReadyResp();
            if (object.code != null)
                message.code = object.code | 0;
            return message;
        };

        /**
         * Creates a plain object from a DeskReadyResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.DeskReadyResp
         * @static
         * @param {pb.DeskReadyResp} message DeskReadyResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeskReadyResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.code = 0;
            if (message.code != null && message.hasOwnProperty("code"))
                object.code = message.code;
            return object;
        };

        /**
         * Converts this DeskReadyResp to JSON.
         * @function toJSON
         * @memberof pb.DeskReadyResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeskReadyResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeskReadyResp
         * @function getTypeUrl
         * @memberof pb.DeskReadyResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeskReadyResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.DeskReadyResp";
        };

        return DeskReadyResp;
    })();

    pb.GameRubyDeskCategoryReq = (function() {

        /**
         * Properties of a GameRubyDeskCategoryReq.
         * @memberof pb
         * @interface IGameRubyDeskCategoryReq
         */

        /**
         * Constructs a new GameRubyDeskCategoryReq.
         * @memberof pb
         * @classdesc Represents a GameRubyDeskCategoryReq.
         * @implements IGameRubyDeskCategoryReq
         * @constructor
         * @param {pb.IGameRubyDeskCategoryReq=} [properties] Properties to set
         */
        function GameRubyDeskCategoryReq(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * Creates a new GameRubyDeskCategoryReq instance using the specified properties.
         * @function create
         * @memberof pb.GameRubyDeskCategoryReq
         * @static
         * @param {pb.IGameRubyDeskCategoryReq=} [properties] Properties to set
         * @returns {pb.GameRubyDeskCategoryReq} GameRubyDeskCategoryReq instance
         */
        GameRubyDeskCategoryReq.create = function create(properties) {
            return new GameRubyDeskCategoryReq(properties);
        };

        /**
         * Encodes the specified GameRubyDeskCategoryReq message. Does not implicitly {@link pb.GameRubyDeskCategoryReq.verify|verify} messages.
         * @function encode
         * @memberof pb.GameRubyDeskCategoryReq
         * @static
         * @param {pb.IGameRubyDeskCategoryReq} message GameRubyDeskCategoryReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        GameRubyDeskCategoryReq.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };

        /**
         * Encodes the specified GameRubyDeskCategoryReq message, length delimited. Does not implicitly {@link pb.GameRubyDeskCategoryReq.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.GameRubyDeskCategoryReq
         * @static
         * @param {pb.IGameRubyDeskCategoryReq} message GameRubyDeskCategoryReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        GameRubyDeskCategoryReq.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a GameRubyDeskCategoryReq message from the specified reader or buffer.
         * @function decode
         * @memberof pb.GameRubyDeskCategoryReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.GameRubyDeskCategoryReq} GameRubyDeskCategoryReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        GameRubyDeskCategoryReq.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.GameRubyDeskCategoryReq();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a GameRubyDeskCategoryReq message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.GameRubyDeskCategoryReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.GameRubyDeskCategoryReq} GameRubyDeskCategoryReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        GameRubyDeskCategoryReq.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a GameRubyDeskCategoryReq message.
         * @function verify
         * @memberof pb.GameRubyDeskCategoryReq
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        GameRubyDeskCategoryReq.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };

        /**
         * Creates a GameRubyDeskCategoryReq message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.GameRubyDeskCategoryReq
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.GameRubyDeskCategoryReq} GameRubyDeskCategoryReq
         */
        GameRubyDeskCategoryReq.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.GameRubyDeskCategoryReq)
                return object;
            return new $root.pb.GameRubyDeskCategoryReq();
        };

        /**
         * Creates a plain object from a GameRubyDeskCategoryReq message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.GameRubyDeskCategoryReq
         * @static
         * @param {pb.GameRubyDeskCategoryReq} message GameRubyDeskCategoryReq
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        GameRubyDeskCategoryReq.toObject = function toObject() {
            return {};
        };

        /**
         * Converts this GameRubyDeskCategoryReq to JSON.
         * @function toJSON
         * @memberof pb.GameRubyDeskCategoryReq
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        GameRubyDeskCategoryReq.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for GameRubyDeskCategoryReq
         * @function getTypeUrl
         * @memberof pb.GameRubyDeskCategoryReq
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        GameRubyDeskCategoryReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.GameRubyDeskCategoryReq";
        };

        return GameRubyDeskCategoryReq;
    })();

    pb.GameRubyDeskCategoryResp = (function() {

        /**
         * Properties of a GameRubyDeskCategoryResp.
         * @memberof pb
         * @interface IGameRubyDeskCategoryResp
         * @property {number|null} [code] GameRubyDeskCategoryResp code
         * @property {Array.<pb.IGameRubyDeskCategoryInfo>|null} [data] GameRubyDeskCategoryResp data
         */

        /**
         * Constructs a new GameRubyDeskCategoryResp.
         * @memberof pb
         * @classdesc Represents a GameRubyDeskCategoryResp.
         * @implements IGameRubyDeskCategoryResp
         * @constructor
         * @param {pb.IGameRubyDeskCategoryResp=} [properties] Properties to set
         */
        function GameRubyDeskCategoryResp(properties) {
            this.data = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * GameRubyDeskCategoryResp code.
         * @member {number} code
         * @memberof pb.GameRubyDeskCategoryResp
         * @instance
         */
        GameRubyDeskCategoryResp.prototype.code = 0;

        /**
         * GameRubyDeskCategoryResp data.
         * @member {Array.<pb.IGameRubyDeskCategoryInfo>} data
         * @memberof pb.GameRubyDeskCategoryResp
         * @instance
         */
        GameRubyDeskCategoryResp.prototype.data = $util.emptyArray;

        /**
         * Creates a new GameRubyDeskCategoryResp instance using the specified properties.
         * @function create
         * @memberof pb.GameRubyDeskCategoryResp
         * @static
         * @param {pb.IGameRubyDeskCategoryResp=} [properties] Properties to set
         * @returns {pb.GameRubyDeskCategoryResp} GameRubyDeskCategoryResp instance
         */
        GameRubyDeskCategoryResp.create = function create(properties) {
            return new GameRubyDeskCategoryResp(properties);
        };

        /**
         * Encodes the specified GameRubyDeskCategoryResp message. Does not implicitly {@link pb.GameRubyDeskCategoryResp.verify|verify} messages.
         * @function encode
         * @memberof pb.GameRubyDeskCategoryResp
         * @static
         * @param {pb.IGameRubyDeskCategoryResp} message GameRubyDeskCategoryResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        GameRubyDeskCategoryResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.code != null && Object.hasOwnProperty.call(message, "code"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.code);
            if (message.data != null && message.data.length)
                for (var i = 0; i < message.data.length; ++i)
                    $root.pb.GameRubyDeskCategoryInfo.encode(message.data[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified GameRubyDeskCategoryResp message, length delimited. Does not implicitly {@link pb.GameRubyDeskCategoryResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.GameRubyDeskCategoryResp
         * @static
         * @param {pb.IGameRubyDeskCategoryResp} message GameRubyDeskCategoryResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        GameRubyDeskCategoryResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a GameRubyDeskCategoryResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.GameRubyDeskCategoryResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.GameRubyDeskCategoryResp} GameRubyDeskCategoryResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        GameRubyDeskCategoryResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.GameRubyDeskCategoryResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.code = reader.int32();
                        break;
                    }
                case 2: {
                        if (!(message.data && message.data.length))
                            message.data = [];
                        message.data.push($root.pb.GameRubyDeskCategoryInfo.decode(reader, reader.uint32()));
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a GameRubyDeskCategoryResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.GameRubyDeskCategoryResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.GameRubyDeskCategoryResp} GameRubyDeskCategoryResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        GameRubyDeskCategoryResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a GameRubyDeskCategoryResp message.
         * @function verify
         * @memberof pb.GameRubyDeskCategoryResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        GameRubyDeskCategoryResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.code != null && message.hasOwnProperty("code"))
                if (!$util.isInteger(message.code))
                    return "code: integer expected";
            if (message.data != null && message.hasOwnProperty("data")) {
                if (!Array.isArray(message.data))
                    return "data: array expected";
                for (var i = 0; i < message.data.length; ++i) {
                    var error = $root.pb.GameRubyDeskCategoryInfo.verify(message.data[i]);
                    if (error)
                        return "data." + error;
                }
            }
            return null;
        };

        /**
         * Creates a GameRubyDeskCategoryResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.GameRubyDeskCategoryResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.GameRubyDeskCategoryResp} GameRubyDeskCategoryResp
         */
        GameRubyDeskCategoryResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.GameRubyDeskCategoryResp)
                return object;
            var message = new $root.pb.GameRubyDeskCategoryResp();
            if (object.code != null)
                message.code = object.code | 0;
            if (object.data) {
                if (!Array.isArray(object.data))
                    throw TypeError(".pb.GameRubyDeskCategoryResp.data: array expected");
                message.data = [];
                for (var i = 0; i < object.data.length; ++i) {
                    if (typeof object.data[i] !== "object")
                        throw TypeError(".pb.GameRubyDeskCategoryResp.data: object expected");
                    message.data[i] = $root.pb.GameRubyDeskCategoryInfo.fromObject(object.data[i]);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from a GameRubyDeskCategoryResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.GameRubyDeskCategoryResp
         * @static
         * @param {pb.GameRubyDeskCategoryResp} message GameRubyDeskCategoryResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        GameRubyDeskCategoryResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.data = [];
            if (options.defaults)
                object.code = 0;
            if (message.code != null && message.hasOwnProperty("code"))
                object.code = message.code;
            if (message.data && message.data.length) {
                object.data = [];
                for (var j = 0; j < message.data.length; ++j)
                    object.data[j] = $root.pb.GameRubyDeskCategoryInfo.toObject(message.data[j], options);
            }
            return object;
        };

        /**
         * Converts this GameRubyDeskCategoryResp to JSON.
         * @function toJSON
         * @memberof pb.GameRubyDeskCategoryResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        GameRubyDeskCategoryResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for GameRubyDeskCategoryResp
         * @function getTypeUrl
         * @memberof pb.GameRubyDeskCategoryResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        GameRubyDeskCategoryResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.GameRubyDeskCategoryResp";
        };

        return GameRubyDeskCategoryResp;
    })();

    pb.GameRubyDeskCategoryInfo = (function() {

        /**
         * Properties of a GameRubyDeskCategoryInfo.
         * @memberof pb
         * @interface IGameRubyDeskCategoryInfo
         * @property {string|null} [gameType] GameRubyDeskCategoryInfo gameType
         * @property {string|null} [gameName] GameRubyDeskCategoryInfo gameName
         * @property {Array.<pb.ICategoryItem>|null} [list] GameRubyDeskCategoryInfo list
         */

        /**
         * Constructs a new GameRubyDeskCategoryInfo.
         * @memberof pb
         * @classdesc Represents a GameRubyDeskCategoryInfo.
         * @implements IGameRubyDeskCategoryInfo
         * @constructor
         * @param {pb.IGameRubyDeskCategoryInfo=} [properties] Properties to set
         */
        function GameRubyDeskCategoryInfo(properties) {
            this.list = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * GameRubyDeskCategoryInfo gameType.
         * @member {string} gameType
         * @memberof pb.GameRubyDeskCategoryInfo
         * @instance
         */
        GameRubyDeskCategoryInfo.prototype.gameType = "";

        /**
         * GameRubyDeskCategoryInfo gameName.
         * @member {string} gameName
         * @memberof pb.GameRubyDeskCategoryInfo
         * @instance
         */
        GameRubyDeskCategoryInfo.prototype.gameName = "";

        /**
         * GameRubyDeskCategoryInfo list.
         * @member {Array.<pb.ICategoryItem>} list
         * @memberof pb.GameRubyDeskCategoryInfo
         * @instance
         */
        GameRubyDeskCategoryInfo.prototype.list = $util.emptyArray;

        /**
         * Creates a new GameRubyDeskCategoryInfo instance using the specified properties.
         * @function create
         * @memberof pb.GameRubyDeskCategoryInfo
         * @static
         * @param {pb.IGameRubyDeskCategoryInfo=} [properties] Properties to set
         * @returns {pb.GameRubyDeskCategoryInfo} GameRubyDeskCategoryInfo instance
         */
        GameRubyDeskCategoryInfo.create = function create(properties) {
            return new GameRubyDeskCategoryInfo(properties);
        };

        /**
         * Encodes the specified GameRubyDeskCategoryInfo message. Does not implicitly {@link pb.GameRubyDeskCategoryInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.GameRubyDeskCategoryInfo
         * @static
         * @param {pb.IGameRubyDeskCategoryInfo} message GameRubyDeskCategoryInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        GameRubyDeskCategoryInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.gameType != null && Object.hasOwnProperty.call(message, "gameType"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.gameType);
            if (message.gameName != null && Object.hasOwnProperty.call(message, "gameName"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.gameName);
            if (message.list != null && message.list.length)
                for (var i = 0; i < message.list.length; ++i)
                    $root.pb.CategoryItem.encode(message.list[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified GameRubyDeskCategoryInfo message, length delimited. Does not implicitly {@link pb.GameRubyDeskCategoryInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.GameRubyDeskCategoryInfo
         * @static
         * @param {pb.IGameRubyDeskCategoryInfo} message GameRubyDeskCategoryInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        GameRubyDeskCategoryInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a GameRubyDeskCategoryInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.GameRubyDeskCategoryInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.GameRubyDeskCategoryInfo} GameRubyDeskCategoryInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        GameRubyDeskCategoryInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.GameRubyDeskCategoryInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.gameType = reader.string();
                        break;
                    }
                case 2: {
                        message.gameName = reader.string();
                        break;
                    }
                case 3: {
                        if (!(message.list && message.list.length))
                            message.list = [];
                        message.list.push($root.pb.CategoryItem.decode(reader, reader.uint32()));
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a GameRubyDeskCategoryInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.GameRubyDeskCategoryInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.GameRubyDeskCategoryInfo} GameRubyDeskCategoryInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        GameRubyDeskCategoryInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a GameRubyDeskCategoryInfo message.
         * @function verify
         * @memberof pb.GameRubyDeskCategoryInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        GameRubyDeskCategoryInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.gameType != null && message.hasOwnProperty("gameType"))
                if (!$util.isString(message.gameType))
                    return "gameType: string expected";
            if (message.gameName != null && message.hasOwnProperty("gameName"))
                if (!$util.isString(message.gameName))
                    return "gameName: string expected";
            if (message.list != null && message.hasOwnProperty("list")) {
                if (!Array.isArray(message.list))
                    return "list: array expected";
                for (var i = 0; i < message.list.length; ++i) {
                    var error = $root.pb.CategoryItem.verify(message.list[i]);
                    if (error)
                        return "list." + error;
                }
            }
            return null;
        };

        /**
         * Creates a GameRubyDeskCategoryInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.GameRubyDeskCategoryInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.GameRubyDeskCategoryInfo} GameRubyDeskCategoryInfo
         */
        GameRubyDeskCategoryInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.GameRubyDeskCategoryInfo)
                return object;
            var message = new $root.pb.GameRubyDeskCategoryInfo();
            if (object.gameType != null)
                message.gameType = String(object.gameType);
            if (object.gameName != null)
                message.gameName = String(object.gameName);
            if (object.list) {
                if (!Array.isArray(object.list))
                    throw TypeError(".pb.GameRubyDeskCategoryInfo.list: array expected");
                message.list = [];
                for (var i = 0; i < object.list.length; ++i) {
                    if (typeof object.list[i] !== "object")
                        throw TypeError(".pb.GameRubyDeskCategoryInfo.list: object expected");
                    message.list[i] = $root.pb.CategoryItem.fromObject(object.list[i]);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from a GameRubyDeskCategoryInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.GameRubyDeskCategoryInfo
         * @static
         * @param {pb.GameRubyDeskCategoryInfo} message GameRubyDeskCategoryInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        GameRubyDeskCategoryInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.list = [];
            if (options.defaults) {
                object.gameType = "";
                object.gameName = "";
            }
            if (message.gameType != null && message.hasOwnProperty("gameType"))
                object.gameType = message.gameType;
            if (message.gameName != null && message.hasOwnProperty("gameName"))
                object.gameName = message.gameName;
            if (message.list && message.list.length) {
                object.list = [];
                for (var j = 0; j < message.list.length; ++j)
                    object.list[j] = $root.pb.CategoryItem.toObject(message.list[j], options);
            }
            return object;
        };

        /**
         * Converts this GameRubyDeskCategoryInfo to JSON.
         * @function toJSON
         * @memberof pb.GameRubyDeskCategoryInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        GameRubyDeskCategoryInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for GameRubyDeskCategoryInfo
         * @function getTypeUrl
         * @memberof pb.GameRubyDeskCategoryInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        GameRubyDeskCategoryInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.GameRubyDeskCategoryInfo";
        };

        return GameRubyDeskCategoryInfo;
    })();

    pb.MjOpChooseReq = (function() {

        /**
         * Properties of a MjOpChooseReq.
         * @memberof pb
         * @interface IMjOpChooseReq
         * @property {pb.MjOpTpe|null} [type] MjOpChooseReq type
         * @property {number|null} [tileIndex] MjOpChooseReq tileIndex
         */

        /**
         * Constructs a new MjOpChooseReq.
         * @memberof pb
         * @classdesc Represents a MjOpChooseReq.
         * @implements IMjOpChooseReq
         * @constructor
         * @param {pb.IMjOpChooseReq=} [properties] Properties to set
         */
        function MjOpChooseReq(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MjOpChooseReq type.
         * @member {pb.MjOpTpe} type
         * @memberof pb.MjOpChooseReq
         * @instance
         */
        MjOpChooseReq.prototype.type = 0;

        /**
         * MjOpChooseReq tileIndex.
         * @member {number} tileIndex
         * @memberof pb.MjOpChooseReq
         * @instance
         */
        MjOpChooseReq.prototype.tileIndex = 0;

        /**
         * Creates a new MjOpChooseReq instance using the specified properties.
         * @function create
         * @memberof pb.MjOpChooseReq
         * @static
         * @param {pb.IMjOpChooseReq=} [properties] Properties to set
         * @returns {pb.MjOpChooseReq} MjOpChooseReq instance
         */
        MjOpChooseReq.create = function create(properties) {
            return new MjOpChooseReq(properties);
        };

        /**
         * Encodes the specified MjOpChooseReq message. Does not implicitly {@link pb.MjOpChooseReq.verify|verify} messages.
         * @function encode
         * @memberof pb.MjOpChooseReq
         * @static
         * @param {pb.IMjOpChooseReq} message MjOpChooseReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MjOpChooseReq.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);
            if (message.tileIndex != null && Object.hasOwnProperty.call(message, "tileIndex"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.tileIndex);
            return writer;
        };

        /**
         * Encodes the specified MjOpChooseReq message, length delimited. Does not implicitly {@link pb.MjOpChooseReq.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.MjOpChooseReq
         * @static
         * @param {pb.IMjOpChooseReq} message MjOpChooseReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MjOpChooseReq.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MjOpChooseReq message from the specified reader or buffer.
         * @function decode
         * @memberof pb.MjOpChooseReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.MjOpChooseReq} MjOpChooseReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MjOpChooseReq.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.MjOpChooseReq();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.type = reader.int32();
                        break;
                    }
                case 2: {
                        message.tileIndex = reader.int32();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MjOpChooseReq message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.MjOpChooseReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.MjOpChooseReq} MjOpChooseReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MjOpChooseReq.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MjOpChooseReq message.
         * @function verify
         * @memberof pb.MjOpChooseReq
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MjOpChooseReq.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.type != null && message.hasOwnProperty("type"))
                switch (message.type) {
                default:
                    return "type: enum value expected";
                case 0:
                case 1:
                    break;
                }
            if (message.tileIndex != null && message.hasOwnProperty("tileIndex"))
                if (!$util.isInteger(message.tileIndex))
                    return "tileIndex: integer expected";
            return null;
        };

        /**
         * Creates a MjOpChooseReq message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.MjOpChooseReq
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.MjOpChooseReq} MjOpChooseReq
         */
        MjOpChooseReq.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.MjOpChooseReq)
                return object;
            var message = new $root.pb.MjOpChooseReq();
            switch (object.type) {
            default:
                if (typeof object.type === "number") {
                    message.type = object.type;
                    break;
                }
                break;
            case "illegal":
            case 0:
                message.type = 0;
                break;
            case "chu":
            case 1:
                message.type = 1;
                break;
            }
            if (object.tileIndex != null)
                message.tileIndex = object.tileIndex | 0;
            return message;
        };

        /**
         * Creates a plain object from a MjOpChooseReq message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.MjOpChooseReq
         * @static
         * @param {pb.MjOpChooseReq} message MjOpChooseReq
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MjOpChooseReq.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.type = options.enums === String ? "illegal" : 0;
                object.tileIndex = 0;
            }
            if (message.type != null && message.hasOwnProperty("type"))
                object.type = options.enums === String ? $root.pb.MjOpTpe[message.type] === undefined ? message.type : $root.pb.MjOpTpe[message.type] : message.type;
            if (message.tileIndex != null && message.hasOwnProperty("tileIndex"))
                object.tileIndex = message.tileIndex;
            return object;
        };

        /**
         * Converts this MjOpChooseReq to JSON.
         * @function toJSON
         * @memberof pb.MjOpChooseReq
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MjOpChooseReq.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for MjOpChooseReq
         * @function getTypeUrl
         * @memberof pb.MjOpChooseReq
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        MjOpChooseReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.MjOpChooseReq";
        };

        return MjOpChooseReq;
    })();

    pb.MjOpChooseResp = (function() {

        /**
         * Properties of a MjOpChooseResp.
         * @memberof pb
         * @interface IMjOpChooseResp
         * @property {number|null} [code] MjOpChooseResp code
         * @property {pb.IMjOpChooseInfo|null} [data] MjOpChooseResp data
         */

        /**
         * Constructs a new MjOpChooseResp.
         * @memberof pb
         * @classdesc Represents a MjOpChooseResp.
         * @implements IMjOpChooseResp
         * @constructor
         * @param {pb.IMjOpChooseResp=} [properties] Properties to set
         */
        function MjOpChooseResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MjOpChooseResp code.
         * @member {number} code
         * @memberof pb.MjOpChooseResp
         * @instance
         */
        MjOpChooseResp.prototype.code = 0;

        /**
         * MjOpChooseResp data.
         * @member {pb.IMjOpChooseInfo|null|undefined} data
         * @memberof pb.MjOpChooseResp
         * @instance
         */
        MjOpChooseResp.prototype.data = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * MjOpChooseResp _data.
         * @member {"data"|undefined} _data
         * @memberof pb.MjOpChooseResp
         * @instance
         */
        Object.defineProperty(MjOpChooseResp.prototype, "_data", {
            get: $util.oneOfGetter($oneOfFields = ["data"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new MjOpChooseResp instance using the specified properties.
         * @function create
         * @memberof pb.MjOpChooseResp
         * @static
         * @param {pb.IMjOpChooseResp=} [properties] Properties to set
         * @returns {pb.MjOpChooseResp} MjOpChooseResp instance
         */
        MjOpChooseResp.create = function create(properties) {
            return new MjOpChooseResp(properties);
        };

        /**
         * Encodes the specified MjOpChooseResp message. Does not implicitly {@link pb.MjOpChooseResp.verify|verify} messages.
         * @function encode
         * @memberof pb.MjOpChooseResp
         * @static
         * @param {pb.IMjOpChooseResp} message MjOpChooseResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MjOpChooseResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.code != null && Object.hasOwnProperty.call(message, "code"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.code);
            if (message.data != null && Object.hasOwnProperty.call(message, "data"))
                $root.pb.MjOpChooseInfo.encode(message.data, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified MjOpChooseResp message, length delimited. Does not implicitly {@link pb.MjOpChooseResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.MjOpChooseResp
         * @static
         * @param {pb.IMjOpChooseResp} message MjOpChooseResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MjOpChooseResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MjOpChooseResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.MjOpChooseResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.MjOpChooseResp} MjOpChooseResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MjOpChooseResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.MjOpChooseResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.code = reader.int32();
                        break;
                    }
                case 2: {
                        message.data = $root.pb.MjOpChooseInfo.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MjOpChooseResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.MjOpChooseResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.MjOpChooseResp} MjOpChooseResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MjOpChooseResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MjOpChooseResp message.
         * @function verify
         * @memberof pb.MjOpChooseResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MjOpChooseResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.code != null && message.hasOwnProperty("code"))
                if (!$util.isInteger(message.code))
                    return "code: integer expected";
            if (message.data != null && message.hasOwnProperty("data")) {
                properties._data = 1;
                {
                    var error = $root.pb.MjOpChooseInfo.verify(message.data);
                    if (error)
                        return "data." + error;
                }
            }
            return null;
        };

        /**
         * Creates a MjOpChooseResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.MjOpChooseResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.MjOpChooseResp} MjOpChooseResp
         */
        MjOpChooseResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.MjOpChooseResp)
                return object;
            var message = new $root.pb.MjOpChooseResp();
            if (object.code != null)
                message.code = object.code | 0;
            if (object.data != null) {
                if (typeof object.data !== "object")
                    throw TypeError(".pb.MjOpChooseResp.data: object expected");
                message.data = $root.pb.MjOpChooseInfo.fromObject(object.data);
            }
            return message;
        };

        /**
         * Creates a plain object from a MjOpChooseResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.MjOpChooseResp
         * @static
         * @param {pb.MjOpChooseResp} message MjOpChooseResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MjOpChooseResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.code = 0;
            if (message.code != null && message.hasOwnProperty("code"))
                object.code = message.code;
            if (message.data != null && message.hasOwnProperty("data")) {
                object.data = $root.pb.MjOpChooseInfo.toObject(message.data, options);
                if (options.oneofs)
                    object._data = "data";
            }
            return object;
        };

        /**
         * Converts this MjOpChooseResp to JSON.
         * @function toJSON
         * @memberof pb.MjOpChooseResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MjOpChooseResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for MjOpChooseResp
         * @function getTypeUrl
         * @memberof pb.MjOpChooseResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        MjOpChooseResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.MjOpChooseResp";
        };

        return MjOpChooseResp;
    })();

    pb.MjOpChooseInfo = (function() {

        /**
         * Properties of a MjOpChooseInfo.
         * @memberof pb
         * @interface IMjOpChooseInfo
         */

        /**
         * Constructs a new MjOpChooseInfo.
         * @memberof pb
         * @classdesc Represents a MjOpChooseInfo.
         * @implements IMjOpChooseInfo
         * @constructor
         * @param {pb.IMjOpChooseInfo=} [properties] Properties to set
         */
        function MjOpChooseInfo(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * Creates a new MjOpChooseInfo instance using the specified properties.
         * @function create
         * @memberof pb.MjOpChooseInfo
         * @static
         * @param {pb.IMjOpChooseInfo=} [properties] Properties to set
         * @returns {pb.MjOpChooseInfo} MjOpChooseInfo instance
         */
        MjOpChooseInfo.create = function create(properties) {
            return new MjOpChooseInfo(properties);
        };

        /**
         * Encodes the specified MjOpChooseInfo message. Does not implicitly {@link pb.MjOpChooseInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.MjOpChooseInfo
         * @static
         * @param {pb.IMjOpChooseInfo} message MjOpChooseInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MjOpChooseInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };

        /**
         * Encodes the specified MjOpChooseInfo message, length delimited. Does not implicitly {@link pb.MjOpChooseInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.MjOpChooseInfo
         * @static
         * @param {pb.IMjOpChooseInfo} message MjOpChooseInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MjOpChooseInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MjOpChooseInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.MjOpChooseInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.MjOpChooseInfo} MjOpChooseInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MjOpChooseInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.MjOpChooseInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MjOpChooseInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.MjOpChooseInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.MjOpChooseInfo} MjOpChooseInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MjOpChooseInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MjOpChooseInfo message.
         * @function verify
         * @memberof pb.MjOpChooseInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MjOpChooseInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };

        /**
         * Creates a MjOpChooseInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.MjOpChooseInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.MjOpChooseInfo} MjOpChooseInfo
         */
        MjOpChooseInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.MjOpChooseInfo)
                return object;
            return new $root.pb.MjOpChooseInfo();
        };

        /**
         * Creates a plain object from a MjOpChooseInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.MjOpChooseInfo
         * @static
         * @param {pb.MjOpChooseInfo} message MjOpChooseInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MjOpChooseInfo.toObject = function toObject() {
            return {};
        };

        /**
         * Converts this MjOpChooseInfo to JSON.
         * @function toJSON
         * @memberof pb.MjOpChooseInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MjOpChooseInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for MjOpChooseInfo
         * @function getTypeUrl
         * @memberof pb.MjOpChooseInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        MjOpChooseInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.MjOpChooseInfo";
        };

        return MjOpChooseInfo;
    })();

    pb.MjStartDeskPushResp = (function() {

        /**
         * Properties of a MjStartDeskPushResp.
         * @memberof pb
         * @interface IMjStartDeskPushResp
         * @property {Array.<pb.IDuanPaiInfo>|null} [duanPai] MjStartDeskPushResp duanPai
         * @property {pb.IDeskRoundInfo|null} [roundInfo] MjStartDeskPushResp roundInfo
         */

        /**
         * Constructs a new MjStartDeskPushResp.
         * @memberof pb
         * @classdesc Represents a MjStartDeskPushResp.
         * @implements IMjStartDeskPushResp
         * @constructor
         * @param {pb.IMjStartDeskPushResp=} [properties] Properties to set
         */
        function MjStartDeskPushResp(properties) {
            this.duanPai = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MjStartDeskPushResp duanPai.
         * @member {Array.<pb.IDuanPaiInfo>} duanPai
         * @memberof pb.MjStartDeskPushResp
         * @instance
         */
        MjStartDeskPushResp.prototype.duanPai = $util.emptyArray;

        /**
         * MjStartDeskPushResp roundInfo.
         * @member {pb.IDeskRoundInfo|null|undefined} roundInfo
         * @memberof pb.MjStartDeskPushResp
         * @instance
         */
        MjStartDeskPushResp.prototype.roundInfo = null;

        /**
         * Creates a new MjStartDeskPushResp instance using the specified properties.
         * @function create
         * @memberof pb.MjStartDeskPushResp
         * @static
         * @param {pb.IMjStartDeskPushResp=} [properties] Properties to set
         * @returns {pb.MjStartDeskPushResp} MjStartDeskPushResp instance
         */
        MjStartDeskPushResp.create = function create(properties) {
            return new MjStartDeskPushResp(properties);
        };

        /**
         * Encodes the specified MjStartDeskPushResp message. Does not implicitly {@link pb.MjStartDeskPushResp.verify|verify} messages.
         * @function encode
         * @memberof pb.MjStartDeskPushResp
         * @static
         * @param {pb.IMjStartDeskPushResp} message MjStartDeskPushResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MjStartDeskPushResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.duanPai != null && message.duanPai.length)
                for (var i = 0; i < message.duanPai.length; ++i)
                    $root.pb.DuanPaiInfo.encode(message.duanPai[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.roundInfo != null && Object.hasOwnProperty.call(message, "roundInfo"))
                $root.pb.DeskRoundInfo.encode(message.roundInfo, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified MjStartDeskPushResp message, length delimited. Does not implicitly {@link pb.MjStartDeskPushResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.MjStartDeskPushResp
         * @static
         * @param {pb.IMjStartDeskPushResp} message MjStartDeskPushResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MjStartDeskPushResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MjStartDeskPushResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.MjStartDeskPushResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.MjStartDeskPushResp} MjStartDeskPushResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MjStartDeskPushResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.MjStartDeskPushResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        if (!(message.duanPai && message.duanPai.length))
                            message.duanPai = [];
                        message.duanPai.push($root.pb.DuanPaiInfo.decode(reader, reader.uint32()));
                        break;
                    }
                case 2: {
                        message.roundInfo = $root.pb.DeskRoundInfo.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MjStartDeskPushResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.MjStartDeskPushResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.MjStartDeskPushResp} MjStartDeskPushResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MjStartDeskPushResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MjStartDeskPushResp message.
         * @function verify
         * @memberof pb.MjStartDeskPushResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MjStartDeskPushResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.duanPai != null && message.hasOwnProperty("duanPai")) {
                if (!Array.isArray(message.duanPai))
                    return "duanPai: array expected";
                for (var i = 0; i < message.duanPai.length; ++i) {
                    var error = $root.pb.DuanPaiInfo.verify(message.duanPai[i]);
                    if (error)
                        return "duanPai." + error;
                }
            }
            if (message.roundInfo != null && message.hasOwnProperty("roundInfo")) {
                var error = $root.pb.DeskRoundInfo.verify(message.roundInfo);
                if (error)
                    return "roundInfo." + error;
            }
            return null;
        };

        /**
         * Creates a MjStartDeskPushResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.MjStartDeskPushResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.MjStartDeskPushResp} MjStartDeskPushResp
         */
        MjStartDeskPushResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.MjStartDeskPushResp)
                return object;
            var message = new $root.pb.MjStartDeskPushResp();
            if (object.duanPai) {
                if (!Array.isArray(object.duanPai))
                    throw TypeError(".pb.MjStartDeskPushResp.duanPai: array expected");
                message.duanPai = [];
                for (var i = 0; i < object.duanPai.length; ++i) {
                    if (typeof object.duanPai[i] !== "object")
                        throw TypeError(".pb.MjStartDeskPushResp.duanPai: object expected");
                    message.duanPai[i] = $root.pb.DuanPaiInfo.fromObject(object.duanPai[i]);
                }
            }
            if (object.roundInfo != null) {
                if (typeof object.roundInfo !== "object")
                    throw TypeError(".pb.MjStartDeskPushResp.roundInfo: object expected");
                message.roundInfo = $root.pb.DeskRoundInfo.fromObject(object.roundInfo);
            }
            return message;
        };

        /**
         * Creates a plain object from a MjStartDeskPushResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.MjStartDeskPushResp
         * @static
         * @param {pb.MjStartDeskPushResp} message MjStartDeskPushResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MjStartDeskPushResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.duanPai = [];
            if (options.defaults)
                object.roundInfo = null;
            if (message.duanPai && message.duanPai.length) {
                object.duanPai = [];
                for (var j = 0; j < message.duanPai.length; ++j)
                    object.duanPai[j] = $root.pb.DuanPaiInfo.toObject(message.duanPai[j], options);
            }
            if (message.roundInfo != null && message.hasOwnProperty("roundInfo"))
                object.roundInfo = $root.pb.DeskRoundInfo.toObject(message.roundInfo, options);
            return object;
        };

        /**
         * Converts this MjStartDeskPushResp to JSON.
         * @function toJSON
         * @memberof pb.MjStartDeskPushResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MjStartDeskPushResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for MjStartDeskPushResp
         * @function getTypeUrl
         * @memberof pb.MjStartDeskPushResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        MjStartDeskPushResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.MjStartDeskPushResp";
        };

        return MjStartDeskPushResp;
    })();

    pb.PlayerHeroInfo = (function() {

        /**
         * Properties of a PlayerHeroInfo.
         * @memberof pb
         * @interface IPlayerHeroInfo
         * @property {number|null} [heroId] PlayerHeroInfo heroId
         * @property {string|null} [heroName] PlayerHeroInfo heroName
         */

        /**
         * Constructs a new PlayerHeroInfo.
         * @memberof pb
         * @classdesc 英雄数据
         * @implements IPlayerHeroInfo
         * @constructor
         * @param {pb.IPlayerHeroInfo=} [properties] Properties to set
         */
        function PlayerHeroInfo(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * PlayerHeroInfo heroId.
         * @member {number} heroId
         * @memberof pb.PlayerHeroInfo
         * @instance
         */
        PlayerHeroInfo.prototype.heroId = 0;

        /**
         * PlayerHeroInfo heroName.
         * @member {string} heroName
         * @memberof pb.PlayerHeroInfo
         * @instance
         */
        PlayerHeroInfo.prototype.heroName = "";

        /**
         * Creates a new PlayerHeroInfo instance using the specified properties.
         * @function create
         * @memberof pb.PlayerHeroInfo
         * @static
         * @param {pb.IPlayerHeroInfo=} [properties] Properties to set
         * @returns {pb.PlayerHeroInfo} PlayerHeroInfo instance
         */
        PlayerHeroInfo.create = function create(properties) {
            return new PlayerHeroInfo(properties);
        };

        /**
         * Encodes the specified PlayerHeroInfo message. Does not implicitly {@link pb.PlayerHeroInfo.verify|verify} messages.
         * @function encode
         * @memberof pb.PlayerHeroInfo
         * @static
         * @param {pb.IPlayerHeroInfo} message PlayerHeroInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerHeroInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.heroId != null && Object.hasOwnProperty.call(message, "heroId"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.heroId);
            if (message.heroName != null && Object.hasOwnProperty.call(message, "heroName"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.heroName);
            return writer;
        };

        /**
         * Encodes the specified PlayerHeroInfo message, length delimited. Does not implicitly {@link pb.PlayerHeroInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.PlayerHeroInfo
         * @static
         * @param {pb.IPlayerHeroInfo} message PlayerHeroInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerHeroInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a PlayerHeroInfo message from the specified reader or buffer.
         * @function decode
         * @memberof pb.PlayerHeroInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.PlayerHeroInfo} PlayerHeroInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerHeroInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.PlayerHeroInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.heroId = reader.int32();
                        break;
                    }
                case 2: {
                        message.heroName = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a PlayerHeroInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.PlayerHeroInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.PlayerHeroInfo} PlayerHeroInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerHeroInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a PlayerHeroInfo message.
         * @function verify
         * @memberof pb.PlayerHeroInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        PlayerHeroInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.heroId != null && message.hasOwnProperty("heroId"))
                if (!$util.isInteger(message.heroId))
                    return "heroId: integer expected";
            if (message.heroName != null && message.hasOwnProperty("heroName"))
                if (!$util.isString(message.heroName))
                    return "heroName: string expected";
            return null;
        };

        /**
         * Creates a PlayerHeroInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.PlayerHeroInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.PlayerHeroInfo} PlayerHeroInfo
         */
        PlayerHeroInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.PlayerHeroInfo)
                return object;
            var message = new $root.pb.PlayerHeroInfo();
            if (object.heroId != null)
                message.heroId = object.heroId | 0;
            if (object.heroName != null)
                message.heroName = String(object.heroName);
            return message;
        };

        /**
         * Creates a plain object from a PlayerHeroInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.PlayerHeroInfo
         * @static
         * @param {pb.PlayerHeroInfo} message PlayerHeroInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        PlayerHeroInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.heroId = 0;
                object.heroName = "";
            }
            if (message.heroId != null && message.hasOwnProperty("heroId"))
                object.heroId = message.heroId;
            if (message.heroName != null && message.hasOwnProperty("heroName"))
                object.heroName = message.heroName;
            return object;
        };

        /**
         * Converts this PlayerHeroInfo to JSON.
         * @function toJSON
         * @memberof pb.PlayerHeroInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        PlayerHeroInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for PlayerHeroInfo
         * @function getTypeUrl
         * @memberof pb.PlayerHeroInfo
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        PlayerHeroInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.PlayerHeroInfo";
        };

        return PlayerHeroInfo;
    })();

    pb.HeroList = (function() {

        /**
         * Properties of a HeroList.
         * @memberof pb
         * @interface IHeroList
         * @property {Array.<pb.IPlayerHeroInfo>|null} [heroList] HeroList heroList
         */

        /**
         * Constructs a new HeroList.
         * @memberof pb
         * @classdesc 已拥有的英雄列表
         * @implements IHeroList
         * @constructor
         * @param {pb.IHeroList=} [properties] Properties to set
         */
        function HeroList(properties) {
            this.heroList = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * HeroList heroList.
         * @member {Array.<pb.IPlayerHeroInfo>} heroList
         * @memberof pb.HeroList
         * @instance
         */
        HeroList.prototype.heroList = $util.emptyArray;

        /**
         * Creates a new HeroList instance using the specified properties.
         * @function create
         * @memberof pb.HeroList
         * @static
         * @param {pb.IHeroList=} [properties] Properties to set
         * @returns {pb.HeroList} HeroList instance
         */
        HeroList.create = function create(properties) {
            return new HeroList(properties);
        };

        /**
         * Encodes the specified HeroList message. Does not implicitly {@link pb.HeroList.verify|verify} messages.
         * @function encode
         * @memberof pb.HeroList
         * @static
         * @param {pb.IHeroList} message HeroList message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        HeroList.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.heroList != null && message.heroList.length)
                for (var i = 0; i < message.heroList.length; ++i)
                    $root.pb.PlayerHeroInfo.encode(message.heroList[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified HeroList message, length delimited. Does not implicitly {@link pb.HeroList.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.HeroList
         * @static
         * @param {pb.IHeroList} message HeroList message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        HeroList.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a HeroList message from the specified reader or buffer.
         * @function decode
         * @memberof pb.HeroList
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.HeroList} HeroList
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        HeroList.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.HeroList();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        if (!(message.heroList && message.heroList.length))
                            message.heroList = [];
                        message.heroList.push($root.pb.PlayerHeroInfo.decode(reader, reader.uint32()));
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a HeroList message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.HeroList
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.HeroList} HeroList
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        HeroList.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a HeroList message.
         * @function verify
         * @memberof pb.HeroList
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        HeroList.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.heroList != null && message.hasOwnProperty("heroList")) {
                if (!Array.isArray(message.heroList))
                    return "heroList: array expected";
                for (var i = 0; i < message.heroList.length; ++i) {
                    var error = $root.pb.PlayerHeroInfo.verify(message.heroList[i]);
                    if (error)
                        return "heroList." + error;
                }
            }
            return null;
        };

        /**
         * Creates a HeroList message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.HeroList
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.HeroList} HeroList
         */
        HeroList.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.HeroList)
                return object;
            var message = new $root.pb.HeroList();
            if (object.heroList) {
                if (!Array.isArray(object.heroList))
                    throw TypeError(".pb.HeroList.heroList: array expected");
                message.heroList = [];
                for (var i = 0; i < object.heroList.length; ++i) {
                    if (typeof object.heroList[i] !== "object")
                        throw TypeError(".pb.HeroList.heroList: object expected");
                    message.heroList[i] = $root.pb.PlayerHeroInfo.fromObject(object.heroList[i]);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from a HeroList message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.HeroList
         * @static
         * @param {pb.HeroList} message HeroList
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        HeroList.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.heroList = [];
            if (message.heroList && message.heroList.length) {
                object.heroList = [];
                for (var j = 0; j < message.heroList.length; ++j)
                    object.heroList[j] = $root.pb.PlayerHeroInfo.toObject(message.heroList[j], options);
            }
            return object;
        };

        /**
         * Converts this HeroList to JSON.
         * @function toJSON
         * @memberof pb.HeroList
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        HeroList.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for HeroList
         * @function getTypeUrl
         * @memberof pb.HeroList
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        HeroList.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.HeroList";
        };

        return HeroList;
    })();

    pb.PlayerLoginReq = (function() {

        /**
         * Properties of a PlayerLoginReq.
         * @memberof pb
         * @interface IPlayerLoginReq
         * @property {pb.LoginType|null} [loginType] PlayerLoginReq loginType
         * @property {string|null} [platform] PlayerLoginReq platform
         * @property {string|null} [code] PlayerLoginReq code
         * @property {string|null} [touristId] PlayerLoginReq touristId
         */

        /**
         * Constructs a new PlayerLoginReq.
         * @memberof pb
         * @classdesc Represents a PlayerLoginReq.
         * @implements IPlayerLoginReq
         * @constructor
         * @param {pb.IPlayerLoginReq=} [properties] Properties to set
         */
        function PlayerLoginReq(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * PlayerLoginReq loginType.
         * @member {pb.LoginType} loginType
         * @memberof pb.PlayerLoginReq
         * @instance
         */
        PlayerLoginReq.prototype.loginType = 0;

        /**
         * PlayerLoginReq platform.
         * @member {string} platform
         * @memberof pb.PlayerLoginReq
         * @instance
         */
        PlayerLoginReq.prototype.platform = "";

        /**
         * PlayerLoginReq code.
         * @member {string|null|undefined} code
         * @memberof pb.PlayerLoginReq
         * @instance
         */
        PlayerLoginReq.prototype.code = null;

        /**
         * PlayerLoginReq touristId.
         * @member {string|null|undefined} touristId
         * @memberof pb.PlayerLoginReq
         * @instance
         */
        PlayerLoginReq.prototype.touristId = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * PlayerLoginReq _code.
         * @member {"code"|undefined} _code
         * @memberof pb.PlayerLoginReq
         * @instance
         */
        Object.defineProperty(PlayerLoginReq.prototype, "_code", {
            get: $util.oneOfGetter($oneOfFields = ["code"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * PlayerLoginReq _touristId.
         * @member {"touristId"|undefined} _touristId
         * @memberof pb.PlayerLoginReq
         * @instance
         */
        Object.defineProperty(PlayerLoginReq.prototype, "_touristId", {
            get: $util.oneOfGetter($oneOfFields = ["touristId"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new PlayerLoginReq instance using the specified properties.
         * @function create
         * @memberof pb.PlayerLoginReq
         * @static
         * @param {pb.IPlayerLoginReq=} [properties] Properties to set
         * @returns {pb.PlayerLoginReq} PlayerLoginReq instance
         */
        PlayerLoginReq.create = function create(properties) {
            return new PlayerLoginReq(properties);
        };

        /**
         * Encodes the specified PlayerLoginReq message. Does not implicitly {@link pb.PlayerLoginReq.verify|verify} messages.
         * @function encode
         * @memberof pb.PlayerLoginReq
         * @static
         * @param {pb.IPlayerLoginReq} message PlayerLoginReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerLoginReq.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.loginType != null && Object.hasOwnProperty.call(message, "loginType"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.loginType);
            if (message.platform != null && Object.hasOwnProperty.call(message, "platform"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.platform);
            if (message.code != null && Object.hasOwnProperty.call(message, "code"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.code);
            if (message.touristId != null && Object.hasOwnProperty.call(message, "touristId"))
                writer.uint32(/* id 4, wireType 2 =*/34).string(message.touristId);
            return writer;
        };

        /**
         * Encodes the specified PlayerLoginReq message, length delimited. Does not implicitly {@link pb.PlayerLoginReq.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.PlayerLoginReq
         * @static
         * @param {pb.IPlayerLoginReq} message PlayerLoginReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerLoginReq.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a PlayerLoginReq message from the specified reader or buffer.
         * @function decode
         * @memberof pb.PlayerLoginReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.PlayerLoginReq} PlayerLoginReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerLoginReq.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.PlayerLoginReq();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.loginType = reader.int32();
                        break;
                    }
                case 2: {
                        message.platform = reader.string();
                        break;
                    }
                case 3: {
                        message.code = reader.string();
                        break;
                    }
                case 4: {
                        message.touristId = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a PlayerLoginReq message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.PlayerLoginReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.PlayerLoginReq} PlayerLoginReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerLoginReq.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a PlayerLoginReq message.
         * @function verify
         * @memberof pb.PlayerLoginReq
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        PlayerLoginReq.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.loginType != null && message.hasOwnProperty("loginType"))
                switch (message.loginType) {
                default:
                    return "loginType: enum value expected";
                case 0:
                case 1:
                case 2:
                case 3:
                    break;
                }
            if (message.platform != null && message.hasOwnProperty("platform"))
                if (!$util.isString(message.platform))
                    return "platform: string expected";
            if (message.code != null && message.hasOwnProperty("code")) {
                properties._code = 1;
                if (!$util.isString(message.code))
                    return "code: string expected";
            }
            if (message.touristId != null && message.hasOwnProperty("touristId")) {
                properties._touristId = 1;
                if (!$util.isString(message.touristId))
                    return "touristId: string expected";
            }
            return null;
        };

        /**
         * Creates a PlayerLoginReq message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.PlayerLoginReq
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.PlayerLoginReq} PlayerLoginReq
         */
        PlayerLoginReq.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.PlayerLoginReq)
                return object;
            var message = new $root.pb.PlayerLoginReq();
            switch (object.loginType) {
            default:
                if (typeof object.loginType === "number") {
                    message.loginType = object.loginType;
                    break;
                }
                break;
            case "Unknown":
            case 0:
                message.loginType = 0;
                break;
            case "Tourist":
            case 1:
                message.loginType = 1;
                break;
            case "MiniApp":
            case 2:
                message.loginType = 2;
                break;
            case "Phone":
            case 3:
                message.loginType = 3;
                break;
            }
            if (object.platform != null)
                message.platform = String(object.platform);
            if (object.code != null)
                message.code = String(object.code);
            if (object.touristId != null)
                message.touristId = String(object.touristId);
            return message;
        };

        /**
         * Creates a plain object from a PlayerLoginReq message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.PlayerLoginReq
         * @static
         * @param {pb.PlayerLoginReq} message PlayerLoginReq
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        PlayerLoginReq.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.loginType = options.enums === String ? "Unknown" : 0;
                object.platform = "";
            }
            if (message.loginType != null && message.hasOwnProperty("loginType"))
                object.loginType = options.enums === String ? $root.pb.LoginType[message.loginType] === undefined ? message.loginType : $root.pb.LoginType[message.loginType] : message.loginType;
            if (message.platform != null && message.hasOwnProperty("platform"))
                object.platform = message.platform;
            if (message.code != null && message.hasOwnProperty("code")) {
                object.code = message.code;
                if (options.oneofs)
                    object._code = "code";
            }
            if (message.touristId != null && message.hasOwnProperty("touristId")) {
                object.touristId = message.touristId;
                if (options.oneofs)
                    object._touristId = "touristId";
            }
            return object;
        };

        /**
         * Converts this PlayerLoginReq to JSON.
         * @function toJSON
         * @memberof pb.PlayerLoginReq
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        PlayerLoginReq.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for PlayerLoginReq
         * @function getTypeUrl
         * @memberof pb.PlayerLoginReq
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        PlayerLoginReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.PlayerLoginReq";
        };

        return PlayerLoginReq;
    })();

    /**
     * LoginType enum.
     * @name pb.LoginType
     * @enum {number}
     * @property {number} Unknown=0 Unknown value
     * @property {number} Tourist=1 Tourist value
     * @property {number} MiniApp=2 MiniApp value
     * @property {number} Phone=3 Phone value
     */
    pb.LoginType = (function() {
        var valuesById = {}, values = Object.create(valuesById);
        values[valuesById[0] = "Unknown"] = 0;
        values[valuesById[1] = "Tourist"] = 1;
        values[valuesById[2] = "MiniApp"] = 2;
        values[valuesById[3] = "Phone"] = 3;
        return values;
    })();

    pb.PlayerLoginResp = (function() {

        /**
         * Properties of a PlayerLoginResp.
         * @memberof pb
         * @interface IPlayerLoginResp
         * @property {number|null} [code] PlayerLoginResp code
         * @property {pb.IPlayerModel|null} [data] PlayerLoginResp data
         */

        /**
         * Constructs a new PlayerLoginResp.
         * @memberof pb
         * @classdesc Represents a PlayerLoginResp.
         * @implements IPlayerLoginResp
         * @constructor
         * @param {pb.IPlayerLoginResp=} [properties] Properties to set
         */
        function PlayerLoginResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * PlayerLoginResp code.
         * @member {number} code
         * @memberof pb.PlayerLoginResp
         * @instance
         */
        PlayerLoginResp.prototype.code = 0;

        /**
         * PlayerLoginResp data.
         * @member {pb.IPlayerModel|null|undefined} data
         * @memberof pb.PlayerLoginResp
         * @instance
         */
        PlayerLoginResp.prototype.data = null;

        // OneOf field names bound to virtual getters and setters
        var $oneOfFields;

        /**
         * PlayerLoginResp _data.
         * @member {"data"|undefined} _data
         * @memberof pb.PlayerLoginResp
         * @instance
         */
        Object.defineProperty(PlayerLoginResp.prototype, "_data", {
            get: $util.oneOfGetter($oneOfFields = ["data"]),
            set: $util.oneOfSetter($oneOfFields)
        });

        /**
         * Creates a new PlayerLoginResp instance using the specified properties.
         * @function create
         * @memberof pb.PlayerLoginResp
         * @static
         * @param {pb.IPlayerLoginResp=} [properties] Properties to set
         * @returns {pb.PlayerLoginResp} PlayerLoginResp instance
         */
        PlayerLoginResp.create = function create(properties) {
            return new PlayerLoginResp(properties);
        };

        /**
         * Encodes the specified PlayerLoginResp message. Does not implicitly {@link pb.PlayerLoginResp.verify|verify} messages.
         * @function encode
         * @memberof pb.PlayerLoginResp
         * @static
         * @param {pb.IPlayerLoginResp} message PlayerLoginResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerLoginResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.code != null && Object.hasOwnProperty.call(message, "code"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.code);
            if (message.data != null && Object.hasOwnProperty.call(message, "data"))
                $root.pb.PlayerModel.encode(message.data, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified PlayerLoginResp message, length delimited. Does not implicitly {@link pb.PlayerLoginResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.PlayerLoginResp
         * @static
         * @param {pb.IPlayerLoginResp} message PlayerLoginResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerLoginResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a PlayerLoginResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.PlayerLoginResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.PlayerLoginResp} PlayerLoginResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerLoginResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.PlayerLoginResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.code = reader.int32();
                        break;
                    }
                case 2: {
                        message.data = $root.pb.PlayerModel.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a PlayerLoginResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.PlayerLoginResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.PlayerLoginResp} PlayerLoginResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerLoginResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a PlayerLoginResp message.
         * @function verify
         * @memberof pb.PlayerLoginResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        PlayerLoginResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            var properties = {};
            if (message.code != null && message.hasOwnProperty("code"))
                if (!$util.isInteger(message.code))
                    return "code: integer expected";
            if (message.data != null && message.hasOwnProperty("data")) {
                properties._data = 1;
                {
                    var error = $root.pb.PlayerModel.verify(message.data);
                    if (error)
                        return "data." + error;
                }
            }
            return null;
        };

        /**
         * Creates a PlayerLoginResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.PlayerLoginResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.PlayerLoginResp} PlayerLoginResp
         */
        PlayerLoginResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.PlayerLoginResp)
                return object;
            var message = new $root.pb.PlayerLoginResp();
            if (object.code != null)
                message.code = object.code | 0;
            if (object.data != null) {
                if (typeof object.data !== "object")
                    throw TypeError(".pb.PlayerLoginResp.data: object expected");
                message.data = $root.pb.PlayerModel.fromObject(object.data);
            }
            return message;
        };

        /**
         * Creates a plain object from a PlayerLoginResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.PlayerLoginResp
         * @static
         * @param {pb.PlayerLoginResp} message PlayerLoginResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        PlayerLoginResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.code = 0;
            if (message.code != null && message.hasOwnProperty("code"))
                object.code = message.code;
            if (message.data != null && message.hasOwnProperty("data")) {
                object.data = $root.pb.PlayerModel.toObject(message.data, options);
                if (options.oneofs)
                    object._data = "data";
            }
            return object;
        };

        /**
         * Converts this PlayerLoginResp to JSON.
         * @function toJSON
         * @memberof pb.PlayerLoginResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        PlayerLoginResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for PlayerLoginResp
         * @function getTypeUrl
         * @memberof pb.PlayerLoginResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        PlayerLoginResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.PlayerLoginResp";
        };

        return PlayerLoginResp;
    })();

    pb.PlayerUpdateUserInfoReq = (function() {

        /**
         * Properties of a PlayerUpdateUserInfoReq.
         * @memberof pb
         * @interface IPlayerUpdateUserInfoReq
         * @property {pb.IPlayerInfo|null} [data] PlayerUpdateUserInfoReq data
         */

        /**
         * Constructs a new PlayerUpdateUserInfoReq.
         * @memberof pb
         * @classdesc Represents a PlayerUpdateUserInfoReq.
         * @implements IPlayerUpdateUserInfoReq
         * @constructor
         * @param {pb.IPlayerUpdateUserInfoReq=} [properties] Properties to set
         */
        function PlayerUpdateUserInfoReq(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * PlayerUpdateUserInfoReq data.
         * @member {pb.IPlayerInfo|null|undefined} data
         * @memberof pb.PlayerUpdateUserInfoReq
         * @instance
         */
        PlayerUpdateUserInfoReq.prototype.data = null;

        /**
         * Creates a new PlayerUpdateUserInfoReq instance using the specified properties.
         * @function create
         * @memberof pb.PlayerUpdateUserInfoReq
         * @static
         * @param {pb.IPlayerUpdateUserInfoReq=} [properties] Properties to set
         * @returns {pb.PlayerUpdateUserInfoReq} PlayerUpdateUserInfoReq instance
         */
        PlayerUpdateUserInfoReq.create = function create(properties) {
            return new PlayerUpdateUserInfoReq(properties);
        };

        /**
         * Encodes the specified PlayerUpdateUserInfoReq message. Does not implicitly {@link pb.PlayerUpdateUserInfoReq.verify|verify} messages.
         * @function encode
         * @memberof pb.PlayerUpdateUserInfoReq
         * @static
         * @param {pb.IPlayerUpdateUserInfoReq} message PlayerUpdateUserInfoReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerUpdateUserInfoReq.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.data != null && Object.hasOwnProperty.call(message, "data"))
                $root.pb.PlayerInfo.encode(message.data, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified PlayerUpdateUserInfoReq message, length delimited. Does not implicitly {@link pb.PlayerUpdateUserInfoReq.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.PlayerUpdateUserInfoReq
         * @static
         * @param {pb.IPlayerUpdateUserInfoReq} message PlayerUpdateUserInfoReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerUpdateUserInfoReq.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a PlayerUpdateUserInfoReq message from the specified reader or buffer.
         * @function decode
         * @memberof pb.PlayerUpdateUserInfoReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.PlayerUpdateUserInfoReq} PlayerUpdateUserInfoReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerUpdateUserInfoReq.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.PlayerUpdateUserInfoReq();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.data = $root.pb.PlayerInfo.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a PlayerUpdateUserInfoReq message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.PlayerUpdateUserInfoReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.PlayerUpdateUserInfoReq} PlayerUpdateUserInfoReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerUpdateUserInfoReq.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a PlayerUpdateUserInfoReq message.
         * @function verify
         * @memberof pb.PlayerUpdateUserInfoReq
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        PlayerUpdateUserInfoReq.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.data != null && message.hasOwnProperty("data")) {
                var error = $root.pb.PlayerInfo.verify(message.data);
                if (error)
                    return "data." + error;
            }
            return null;
        };

        /**
         * Creates a PlayerUpdateUserInfoReq message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.PlayerUpdateUserInfoReq
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.PlayerUpdateUserInfoReq} PlayerUpdateUserInfoReq
         */
        PlayerUpdateUserInfoReq.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.PlayerUpdateUserInfoReq)
                return object;
            var message = new $root.pb.PlayerUpdateUserInfoReq();
            if (object.data != null) {
                if (typeof object.data !== "object")
                    throw TypeError(".pb.PlayerUpdateUserInfoReq.data: object expected");
                message.data = $root.pb.PlayerInfo.fromObject(object.data);
            }
            return message;
        };

        /**
         * Creates a plain object from a PlayerUpdateUserInfoReq message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.PlayerUpdateUserInfoReq
         * @static
         * @param {pb.PlayerUpdateUserInfoReq} message PlayerUpdateUserInfoReq
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        PlayerUpdateUserInfoReq.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.data = null;
            if (message.data != null && message.hasOwnProperty("data"))
                object.data = $root.pb.PlayerInfo.toObject(message.data, options);
            return object;
        };

        /**
         * Converts this PlayerUpdateUserInfoReq to JSON.
         * @function toJSON
         * @memberof pb.PlayerUpdateUserInfoReq
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        PlayerUpdateUserInfoReq.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for PlayerUpdateUserInfoReq
         * @function getTypeUrl
         * @memberof pb.PlayerUpdateUserInfoReq
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        PlayerUpdateUserInfoReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.PlayerUpdateUserInfoReq";
        };

        return PlayerUpdateUserInfoReq;
    })();

    pb.PlayerUpdateUserInfoResp = (function() {

        /**
         * Properties of a PlayerUpdateUserInfoResp.
         * @memberof pb
         * @interface IPlayerUpdateUserInfoResp
         * @property {number|null} [code] PlayerUpdateUserInfoResp code
         * @property {pb.IPlayerInfo|null} [data] PlayerUpdateUserInfoResp data
         */

        /**
         * Constructs a new PlayerUpdateUserInfoResp.
         * @memberof pb
         * @classdesc Represents a PlayerUpdateUserInfoResp.
         * @implements IPlayerUpdateUserInfoResp
         * @constructor
         * @param {pb.IPlayerUpdateUserInfoResp=} [properties] Properties to set
         */
        function PlayerUpdateUserInfoResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * PlayerUpdateUserInfoResp code.
         * @member {number} code
         * @memberof pb.PlayerUpdateUserInfoResp
         * @instance
         */
        PlayerUpdateUserInfoResp.prototype.code = 0;

        /**
         * PlayerUpdateUserInfoResp data.
         * @member {pb.IPlayerInfo|null|undefined} data
         * @memberof pb.PlayerUpdateUserInfoResp
         * @instance
         */
        PlayerUpdateUserInfoResp.prototype.data = null;

        /**
         * Creates a new PlayerUpdateUserInfoResp instance using the specified properties.
         * @function create
         * @memberof pb.PlayerUpdateUserInfoResp
         * @static
         * @param {pb.IPlayerUpdateUserInfoResp=} [properties] Properties to set
         * @returns {pb.PlayerUpdateUserInfoResp} PlayerUpdateUserInfoResp instance
         */
        PlayerUpdateUserInfoResp.create = function create(properties) {
            return new PlayerUpdateUserInfoResp(properties);
        };

        /**
         * Encodes the specified PlayerUpdateUserInfoResp message. Does not implicitly {@link pb.PlayerUpdateUserInfoResp.verify|verify} messages.
         * @function encode
         * @memberof pb.PlayerUpdateUserInfoResp
         * @static
         * @param {pb.IPlayerUpdateUserInfoResp} message PlayerUpdateUserInfoResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerUpdateUserInfoResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.code != null && Object.hasOwnProperty.call(message, "code"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.code);
            if (message.data != null && Object.hasOwnProperty.call(message, "data"))
                $root.pb.PlayerInfo.encode(message.data, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified PlayerUpdateUserInfoResp message, length delimited. Does not implicitly {@link pb.PlayerUpdateUserInfoResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.PlayerUpdateUserInfoResp
         * @static
         * @param {pb.IPlayerUpdateUserInfoResp} message PlayerUpdateUserInfoResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PlayerUpdateUserInfoResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a PlayerUpdateUserInfoResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.PlayerUpdateUserInfoResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.PlayerUpdateUserInfoResp} PlayerUpdateUserInfoResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerUpdateUserInfoResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.PlayerUpdateUserInfoResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.code = reader.int32();
                        break;
                    }
                case 2: {
                        message.data = $root.pb.PlayerInfo.decode(reader, reader.uint32());
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a PlayerUpdateUserInfoResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.PlayerUpdateUserInfoResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.PlayerUpdateUserInfoResp} PlayerUpdateUserInfoResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PlayerUpdateUserInfoResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a PlayerUpdateUserInfoResp message.
         * @function verify
         * @memberof pb.PlayerUpdateUserInfoResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        PlayerUpdateUserInfoResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.code != null && message.hasOwnProperty("code"))
                if (!$util.isInteger(message.code))
                    return "code: integer expected";
            if (message.data != null && message.hasOwnProperty("data")) {
                var error = $root.pb.PlayerInfo.verify(message.data);
                if (error)
                    return "data." + error;
            }
            return null;
        };

        /**
         * Creates a PlayerUpdateUserInfoResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.PlayerUpdateUserInfoResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.PlayerUpdateUserInfoResp} PlayerUpdateUserInfoResp
         */
        PlayerUpdateUserInfoResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.PlayerUpdateUserInfoResp)
                return object;
            var message = new $root.pb.PlayerUpdateUserInfoResp();
            if (object.code != null)
                message.code = object.code | 0;
            if (object.data != null) {
                if (typeof object.data !== "object")
                    throw TypeError(".pb.PlayerUpdateUserInfoResp.data: object expected");
                message.data = $root.pb.PlayerInfo.fromObject(object.data);
            }
            return message;
        };

        /**
         * Creates a plain object from a PlayerUpdateUserInfoResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.PlayerUpdateUserInfoResp
         * @static
         * @param {pb.PlayerUpdateUserInfoResp} message PlayerUpdateUserInfoResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        PlayerUpdateUserInfoResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.code = 0;
                object.data = null;
            }
            if (message.code != null && message.hasOwnProperty("code"))
                object.code = message.code;
            if (message.data != null && message.hasOwnProperty("data"))
                object.data = $root.pb.PlayerInfo.toObject(message.data, options);
            return object;
        };

        /**
         * Converts this PlayerUpdateUserInfoResp to JSON.
         * @function toJSON
         * @memberof pb.PlayerUpdateUserInfoResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        PlayerUpdateUserInfoResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for PlayerUpdateUserInfoResp
         * @function getTypeUrl
         * @memberof pb.PlayerUpdateUserInfoResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        PlayerUpdateUserInfoResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.PlayerUpdateUserInfoResp";
        };

        return PlayerUpdateUserInfoResp;
    })();

    pb.XlmjDissolveResp = (function() {

        /**
         * Properties of a XlmjDissolveResp.
         * @memberof pb
         * @interface IXlmjDissolveResp
         * @property {number|null} [code] XlmjDissolveResp code
         */

        /**
         * Constructs a new XlmjDissolveResp.
         * @memberof pb
         * @classdesc Represents a XlmjDissolveResp.
         * @implements IXlmjDissolveResp
         * @constructor
         * @param {pb.IXlmjDissolveResp=} [properties] Properties to set
         */
        function XlmjDissolveResp(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * XlmjDissolveResp code.
         * @member {number} code
         * @memberof pb.XlmjDissolveResp
         * @instance
         */
        XlmjDissolveResp.prototype.code = 0;

        /**
         * Creates a new XlmjDissolveResp instance using the specified properties.
         * @function create
         * @memberof pb.XlmjDissolveResp
         * @static
         * @param {pb.IXlmjDissolveResp=} [properties] Properties to set
         * @returns {pb.XlmjDissolveResp} XlmjDissolveResp instance
         */
        XlmjDissolveResp.create = function create(properties) {
            return new XlmjDissolveResp(properties);
        };

        /**
         * Encodes the specified XlmjDissolveResp message. Does not implicitly {@link pb.XlmjDissolveResp.verify|verify} messages.
         * @function encode
         * @memberof pb.XlmjDissolveResp
         * @static
         * @param {pb.IXlmjDissolveResp} message XlmjDissolveResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        XlmjDissolveResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.code != null && Object.hasOwnProperty.call(message, "code"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.code);
            return writer;
        };

        /**
         * Encodes the specified XlmjDissolveResp message, length delimited. Does not implicitly {@link pb.XlmjDissolveResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof pb.XlmjDissolveResp
         * @static
         * @param {pb.IXlmjDissolveResp} message XlmjDissolveResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        XlmjDissolveResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a XlmjDissolveResp message from the specified reader or buffer.
         * @function decode
         * @memberof pb.XlmjDissolveResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {pb.XlmjDissolveResp} XlmjDissolveResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        XlmjDissolveResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.XlmjDissolveResp();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.code = reader.int32();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a XlmjDissolveResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof pb.XlmjDissolveResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {pb.XlmjDissolveResp} XlmjDissolveResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        XlmjDissolveResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a XlmjDissolveResp message.
         * @function verify
         * @memberof pb.XlmjDissolveResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        XlmjDissolveResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.code != null && message.hasOwnProperty("code"))
                if (!$util.isInteger(message.code))
                    return "code: integer expected";
            return null;
        };

        /**
         * Creates a XlmjDissolveResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof pb.XlmjDissolveResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {pb.XlmjDissolveResp} XlmjDissolveResp
         */
        XlmjDissolveResp.fromObject = function fromObject(object) {
            if (object instanceof $root.pb.XlmjDissolveResp)
                return object;
            var message = new $root.pb.XlmjDissolveResp();
            if (object.code != null)
                message.code = object.code | 0;
            return message;
        };

        /**
         * Creates a plain object from a XlmjDissolveResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof pb.XlmjDissolveResp
         * @static
         * @param {pb.XlmjDissolveResp} message XlmjDissolveResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        XlmjDissolveResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.code = 0;
            if (message.code != null && message.hasOwnProperty("code"))
                object.code = message.code;
            return object;
        };

        /**
         * Converts this XlmjDissolveResp to JSON.
         * @function toJSON
         * @memberof pb.XlmjDissolveResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        XlmjDissolveResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for XlmjDissolveResp
         * @function getTypeUrl
         * @memberof pb.XlmjDissolveResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        XlmjDissolveResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/pb.XlmjDissolveResp";
        };

        return XlmjDissolveResp;
    })();

    return pb;
})();

module.exports = $root;
